我需要帮助。我在 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
});
});
我会确保两个浏览器都加载相同的源。老实说,.on
在使用 jQuery 1.6 时,Firefox 有点无法使用,因为该方法不存在。
在您的控制台(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,因此您无法访问.on
jQuery 1.7 中引入的方法。适当的后备方法是改用该.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
,顺序颠倒。
正在发生两件事之一:
$
is not 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
一如既往地附加在身体水平。因此,上述内容可能会更有效地编写,具体取决于目标所在的位置。
快乐编码。