IE 9 jQuery错误:"对象不支持''on'"?

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,而不是IE?

我会确保两个浏览器都加载相同的源.说实话,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,使用.delegate而不是.on

由于您使用的是jQuery 1.6,因此无法访问.onjQuery 1.7中引入的方法.适当的后备将是使用该.delegate方法,或者您可以升级到最新版本的jQuery(Microsoft CDN,Google CDN,jQuery CDN).

该语法.delegate如下是.on相当密切:

$("#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

发生以下两件事之一:

  1. $不是jQuery,但在别处定义的功能; 要么,

  2. $不是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在身体水平附着.因此,根据目标所在的位置,可以更有效地编写上述内容.

快乐的编码.

  • @Jashwant因为事情变幻无常.我所做的断言是真的,我是正确的,或者他们不是真的,我是不正确的.在任何情况下,我都提供了断言来测试/验证:-) (2认同)