我需要帮助。在IE9中出现以下错误。代码在FireFox中可以正常运行:
SCRIPT438: Object doesn't support property or method 'on'
这是在以下代码中引发的:
$(function() {
$(document).on('change', '#dropdownval select', function(event) {
//logic function
});
});
我需要帮助。在IE9中出现以下错误。代码在FireFox中可以正常运行:
SCRIPT438: Object doesn't support property or method 'on'
这是在以下代码中引发的:
$(function() {
$(document).on('change', '#dropdownval select', function(event) {
//logic function
});
});
我建议确保两个浏览器都加载了相同的源代码。老实说,在使用jQuery 1.6时,Firefox使用.on
方法是不可能的,因为该方法不存在。
在控制台中(在IE中使用F12开发人员工具,在Firefox中使用Firebug),键入以下内容:
jQuery.fn.jquery
这应该返回当前页面加载的jQuery版本。例如,截至今天,在StackOverflow上运行该命令的结果为"1.7.1"
。其次,要测试是否存在.on
方法,可以在不使用括号的情况下访问它,并使用双重否定将其转换为真布尔值:
!!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
示例中所做的那样,我们将绑定到靠近选择元素的内容:
$("#dropdownval").on("change", "select", function(event){
alert( $(this).val() );
});
Fiddle: http://jsfiddle.net/jonathansampson/rMBn4/1/
需要注意的是两者之间的主要区别在于链接方法的前两个参数的顺序。使用.delegate
,选择器在事件之前。而使用.on
,顺序则相反。
$
不是 jQuery
,而是在其他地方定义的函数;或者
2. $
不是正确的 jQuery 版本。 on
是在 1.7 版本中引入的。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
一样在body下方附加,而live
总是在body级别附加。因此,根据目标位置的不同,上述代码可能可以更有效地编写。
alert(typeof $(document).on);
吗?这将告诉您它是否存在。 - Niet the Dark Absol$('#dropdownval select').live('change', ...)
对我有用(在此将评论作为先前评论的答案)。 - Vikram