Cod*_*oso 24 jquery events binding javascript-events
使用.load,我将以下内容加载到#step_2 div中:
<div id="step_2">
Select a subcategory:
<select id="subcategory_id" name="subcategory_id">
<option value="0">All subcategories</option>
<option value="68">Cool</option>
<option value="15">Cooler</option>
<option value="74">Excellent</option>
</select>
</div>
Run Code Online (Sandbox Code Playgroud)
然后我试图检测用户选择的东西:
$("#subcategory_id").on("change", function(){
alert( 'Success!' );
});
Run Code Online (Sandbox Code Playgroud)
但没有成功.有谁看到我做错了什么?非常感谢.
笔记:
这是FireBug看到的完整CSS路径:
html.js body div#container div#main form div#step_2 select#subcategory_id
Run Code Online (Sandbox Code Playgroud)
这是完整的javascript文件,如果上下文很重要:
$(document).ready(function() {
$("#category_id").change(function() {
$("#spinner").show();
$("#step_2").load("process.php?selected=category", { value: $(this).val() }, function() {
// Do something to say the data has loaded sucessfully
$("#spinner").hide();
});
});
$("#subcategory_id").on("change", function(){
alert( 'Success!' );
});
});
Run Code Online (Sandbox Code Playgroud)
Ric*_*ton 37
在这种情况下,您需要以on
类似的方式使用delegate
,您使用的语法是替代bind
.
$("#step_2").on("change", "#subcategory_id", function(){
alert( 'Success!' );
});
Run Code Online (Sandbox Code Playgroud)
第一个选择器必须是不会被替换的元素.这样,当事件冒泡到此时就会被捕获.然后,您将指定将触发事件的实际元素作为第二个参数.on
.
Dan*_*ert 13
on(...)
如果没有正确的设置,将不会订阅页面上没有的事件.要做你想做的事,你应该尝试以下方法:
$(document).on("change", "#subcategory_id", function(){
alert( 'Success!' );
});
Run Code Online (Sandbox Code Playgroud)
为了提高效率,您应该$(document)
在调用此代码时替换您知道将在页面上的元素的最近父元素.
您必须在加载html后绑定处理程序,或使用
$("#step_2").on("change", "#subcategory_id", function(){
alert( 'Success!' );
});
Run Code Online (Sandbox Code Playgroud)
当然可以,
$(document).on("change", "#subcategory_id", function(){...});
Run Code Online (Sandbox Code Playgroud)
要使用.on委派事件,请提供要绑定到的父元素,然后提供要委派的选择器.