$(...).on不是一个函数 - jQuery错误

45

我正在使用对话框,当用户在页面上除对话框以外的任意位置点击时我会关闭它。

这是我的代码:

$('body').on('click','.ui-widget-overlay',function()
{ 
    $('#myRateSettingsPopup').dialog('close'); 
}); 

出现错误:

$(...).on 不是一个函数

我的代码有什么问题?

我正在使用 jquery-1.6.1.min.js,但我无法将其更新到最新版本。我被限制了。

还有其他方法可以解决这个问题吗?


1
你是否正确引入了jQuery?你使用的是哪个版本? - Felix
3
很有可能你没有使用最新版本的jQuery。 - SixteenStudio
我正在使用jquery-1.6.1.min.js。但是我无法将其更改为最新版本。 - Hassan Sardar
1
$().on在jQuery 1.7中引入。如果您使用的是旧版本,则请尝试使用jQuery.bind。 - Anirudha Gupta
强烈建议使用更新的jQuery库,1.8或更高版本。 - Makrand
我猜 $().live 已经被弃用了? - Hassan Sardar
5个回答

80

jQuery在1.7版本引入了方法on

我认为你需要将jQuery库升级到最新的版本。

否则,你可以使用bind

$( ".ui-widget-overlay" ).bind( "click", function(e) {
    $('#myRateSettingsPopup').dialog('close');
    e.stopPropagation(); 
});

你能帮我看看为什么我的对话框没有关闭吗? - Hassan Sardar
8
bind只会绑定当前已存在的项目的事件处理程序。 - Prashobh
你能否创建一个 jsfiddle?我想看一个演示来修复你的代码。 - Anirudha Gupta
好的,我正在创建一个 Fiddle。 - Hassan Sardar
@CodeHunter 请查看修复后的代码http://jsfiddle.net/sgC3w/2/ 我在打开对话框后添加了绑定事件。 - Anirudha Gupta
显示剩余7条评论

8

在 jQuery > 1.4.2 中,.on() 的替代方法是 delegate()

$('body').delegate('.ui-widget-overlay', 'click', function () {
    $('#myRateSettingsPopup').dialog('close');
});

4
$( ".close" ).bind( "click", function(e) {
$('#popup1').hide();
    e.stopPropagation(); 
});

jquery-1.7和jqueryui/1.8.2非常完美。

或者使用你的覆盖层(overlay)。

$( ".YOUR OVERLAY" ).bind( "click", function(e) {
$('#YOUR POPUP').hide();
   e.stopPropagation(); 
});

2

尝试使用live而不是on,这是一个jQuery版本问题。

$('body').live('click','.ui-widget-overlay',function()
{ 
    $('#myRateSettingsPopup').dialog('close'); 
}); 

2

由于jquery 1.6.1不支持on,因此您可以使用live

$('body').live('click','.ui-widget-overlay',function(event)
{ 
          event.stopPropagation();        
          $('#myRateSettingsPopup').dialog('close'); 

});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接