2012-08-14 82 views
0

我正在构建一个rails应用程序,当用户在元素上选择一个选项(不显眼)时,我只想简单地触发代码。我已阅读,这样做的最支持的方法是通过直接元素连接到更改事件:rails jquery更改事件不起作用

$('#country_selection').change(function() { alert('it works'); }); 

但是,对我来说,这是行不通的。如果我把它放在控制台中,它工作得很好。但是,将其放入我的视图的js文件中,它不起作用。我知道我的js文件正在加载,因为插入一个简单的alert('in the js file');返回就好。另一个奇怪的部分是,使用实时方法工作:

$('#country_selection').live('change', function() { alert('hello'); }); 

但是,我不想这样做b/c它不支持。我试过的另一个选项是“代理”方法:

$('#country_selection').delegate('change', function() { alert('hello'); }); 

为什么我的更改函数不工作?

+0

尝试使用'bind'方法。 – PradeepKumar 2012-08-14 09:58:35

+0

检查jquery是否正确包含在资产管道中。如果你使用箭头键来选择,你也可以使用'change',因为你需要绑定'keypress'。 – davidb 2012-08-14 10:20:50

回答

1

如果你有一个像

<select id="my-select-box"> 
    <option value="1">First Value</option> 
    <option value="2">Second Value</option> 
</select> 

select元素然后将下面的jQuery代码应该工作

$('#my-select-box').change(function() { 
    alert("hey, i got changed"); 
}); 

当务之急是JQuery的结合你的代码的选择之前,DOM被加载。要做到这一点,请确保您有一个匿名函数中你的代码这样:

jQuery(function(){ 

    $('#my-select-box').change(function() { 
    alert("hey, i got changed"); 
    }); 

}); 

这确保了JQuery的执行,并试图绑定前的DOM被加载。否则,JavaScript将在元素加载之前执行,并且不会正确执行。