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

时间:2012-06-05 06:16:06

标签: jquery internet-explorer internet-explorer-9

我需要帮助。我在IE9中收到以下错误。代码在FireFox中工作:

SCRIPT438: Object doesn't support property or method 'on' 

以下代码引发了这个问题:

$(function() {
    $(document).on('change', '#dropdownval select', function(event) {
        //logic function
    });
});

2 个答案:

答案 0 :(得分:10)

适用于Firefox,而非IE?

我会确保两个浏览器都加载相同的源。说实话,Firefox在使用jQuery 1.6时使用.on有点不可能,因为该方法不存在。

在您的控制台(IE中的F12开发人员工具和Firefox中的Firebug)中输入以下内容:

jQuery.fn.jquery

这应该恢复在该特定页面上加载的当前版本的jQuery。例如,截至今天,在StackOverflow上运行该命令会导致"1.7.1"。其次,为了测试.on方法的存在,你可以在没有括号的情况下访问它,使用double-negation将其转换为真正的布尔值:

!!jQuery.fn.on // True if .on is present, False otherwise

使用jQuery 1.6,使用.delegate而不是.on

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

.delegate的语法非常接近.on的语法:

$("#dropdownval").delegate("select", "change", function(event){
    alert( $(this).val() );
});

小提琴:http://jsfiddle.net/jonathansampson/rMBn4/

如果您决定升级......

您与.on代码关系密切,但您不希望将事件绑定到document对象的最远位置 - 这意味着事件需要传播可能的长距离在处理之前。相反,正如我们对.delegate示例所做的那样,我们将绑定到更接近select元素的东西:

$("#dropdownval").on("change", "select", function(event){
    alert( $(this).val() );
});

小提琴:http://jsfiddle.net/jonathansampson/rMBn4/1/

你会注意到两者之间的主要区别在于链式方法的前两个参数的顺序。使用.delegate,选择器位于事件之前。使用.on,订单会相反。

答案 1 :(得分:7)

正在发生以下两件事之一:

  1. $不是jQuery,而是其他地方定义的函数;或者,

  2. $不是jQuery的正确版本。 on是在1.7中引入的。


  3. 对于jQuery 1.6,以下on

    $(document).on('change', '#dropdownval select', ...)
    

    可以使用delegate编写(自1.4以来,已弃用1.7):

    $(document).delegate('#dropdownval select', 'change', ...)
    

    可以使用live编写(自1.3以来,已弃用):

    $('#dropdownval select').live('change', ...) 
    

    有关更多选项和注意事项,请参阅文档。

    使用delegate 附加"以下"身体(如on)身体live总是附着在身体一级。因此,根据目标所处的位置,可能更有效地编写上述内容。

    快乐的编码。