use*_*824 5 jquery internet-explorer internet-explorer-9
我需要帮助.我在IE9中收到以下错误.代码在FireFox中工作:
SCRIPT438: Object doesn't support property or method 'on'
Run Code Online (Sandbox Code Playgroud)
这是在以下代码中引发的:
$(function() {
$(document).on('change', '#dropdownval select', function(event) {
//logic function
});
});
Run Code Online (Sandbox Code Playgroud)
Sam*_*son 10
我会确保两个浏览器都加载相同的源.说实话,Firefox .on使用jQuery 1.6时有点不可能,因为该方法不存在.
在您的控制台(IE中的F12开发人员工具和Firefox中的Firebug)中键入以下内容:
jQuery.fn.jquery
Run Code Online (Sandbox Code Playgroud)
这应该重新设置在该特定页面上加载的当前版本的jQuery.例如,截至今天,在StackOverflow上运行该命令会导致"1.7.1".其次,要测试.on方法的存在,可以不使用括号访问它,使用double-negation将其转换为true布尔值:
!!jQuery.fn.on // True if .on is present, False otherwise
Run Code Online (Sandbox Code Playgroud)
由于您使用的是jQuery 1.6,因此无法访问.onjQuery 1.7中引入的方法.适当的后备将是使用该.delegate方法,或者您可以升级到最新版本的jQuery(Microsoft CDN,Google CDN,jQuery CDN).
$("#dropdownval").delegate("select", "change", function(event){
alert( $(this).val() );
});
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/jonathansampson/rMBn4/
您与.on代码很接近,但是您不希望将事件绑定到document对象 - 这意味着事件需要在处理之前传播可能的长距离.相反,正如我们对.delegate示例所做的那样,我们将绑定到更接近select元素的东西:
$("#dropdownval").on("change", "select", function(event){
alert( $(this).val() );
});
Run Code Online (Sandbox Code Playgroud)
小提琴:http://jsfiddle.net/jonathansampson/rMBn4/1/
您会注意到两者之间的主要区别在于链接方法的前两个参数的顺序.使用.delegate,选择器在事件之前.随着.on,顺序颠倒了.
小智 7
发生以下两件事之一:
$不是jQuery,但在别处定义的功能; 要么,
$不是jQuery的正确版本.on是在1.7中引入的.
对于jQuery 1.6以下内容on:
$(document).on('change', '#dropdownval select', ...)
Run Code Online (Sandbox Code Playgroud)
可以使用delegate(从1.4开始,不推荐使用1.7):
$(document).delegate('#dropdownval select', 'change', ...)
Run Code Online (Sandbox Code Playgroud)
可以使用live(从1.3开始,不推荐使用)编写:
$('#dropdownval select').live('change', ...)
Run Code Online (Sandbox Code Playgroud)
有关更多选项和注意事项,请参阅文档.
使用delegate 可以附着在身体下方的"下方"(像on)一样live在身体水平附着.因此,根据目标所在的位置,可以更有效地编写上述内容.
快乐的编码.