IE 9 jQuery的错误:“对象不支持......‘在’?”(IE 9 jQuery error

2019-06-25 04:57发布

我需要帮助。 我得到在IE9以下错误。 该代码是工作在Firefox中:

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

这提高了对下面的代码:

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

Answer 1:

在Firefox,IE不?

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

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

jQuery.fn.jquery

这应该resturn jQuery的当前版本加载特定的页面上。 例如,截至今日,在这里运行命令在计算器上导致"1.7.1" 。 其次,以测试的存在.on方法,您可以访问它没有它的括号,采用双否定它转换为一个真正的布尔值:

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

使用jQuery 1.6,使用.delegate而不是。对

由于您使用jQuery 1.6,你没有访问.on方法,这是在jQuery的1.7推出。 适当的回退将使用.delegate方法来代替,或者你可以升级到jQuery的(最新版本的Microsoft CDN , 谷歌CDN , jQuery的CDN )。

对于语法.delegate遵循的.on相当密切:

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

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

如果你决定升级...

你接近你的.on码,但你不想绑定事件就下来的document对象-这将意味着该事件需要被处理之前传播可能很长的距离。 相反,当我们用做.delegate例子中,我们将绑定到更接近于选择元素:

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

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

你会注意到,两者之间的主要区别是前两个参数的链接方法的顺序。 随着.delegate ,选择先于事件。 有了.on ,顺序是相反的。



Answer 2:

其中的两件事情是发生:

  1. $不是jQuery ,而是一个功能别处定义; 要么,

  2. $不是jQuery的正确版本。 on在1.7推出。


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一贯重视在体内的水平。 因此,上述可能被更有效地写入,取决于其中目标被定位。

编码愉快。



文章来源: IE 9 jQuery error: “Object doesn't support … 'on'”?