我需要帮助。我在IE9中收到以下错误。代码在FireFox中工作:
SCRIPT438: Object doesn't support property or method 'on'
以下代码引发了这个问题:
$(function() {
$(document).on('change', '#dropdownval select', function(event) {
//logic function
});
});
答案 0 :(得分:10)
我会确保两个浏览器都加载相同的源。说实话,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,因此您无权访问jQuery 1.7中引入的.on
方法。适当的后备将是使用.delegate
方法,或者您可以升级到最新版本的jQuery(Microsoft CDN,Google CDN,jQuery CDN)。
$("#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)
正在发生以下两件事之一:
$
不是jQuery
,而是其他地方定义的函数;或者,
$
不是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
总是附着在身体一级。因此,根据目标所处的位置,可能更有效地编写上述内容。
快乐的编码。