更改ID后,旧的jquery点击处理程序仍处于活动状态

时间:2011-01-25 14:13:22

标签: jquery

我知道主题不清楚,但我找不到更好的句子。

我正在构建一个ajax表单。目前,我可以通过单击保存按钮并使用编辑按钮从db获取值,将表单字段保存到数据库中。单击编辑按钮时,我还会更改保存按钮的#id。但按钮仍然可以用作保存按钮,但我更改了它的#id。

这是我的按钮:

<a class="btn" id="save_post">Save Post</a>

当我点击编辑按钮时,我更改了表单值并更改了“保存帖子”按钮的#id;

$('#save_post').attr('id','edit_save_post');

毕竟,Firebug显示一切正常,#id已更改。

<a class="btn" id="edit_save_post">Save Post</a>

但是当我点击按钮时它不会运行更新数据库,它会再次运行保存。我怎么能让浏览器忘记旧的#id?

谢谢,

4 个答案:

答案 0 :(得分:6)

您最有可能使用$('...').click(yourfunction);绑定处理程序 在这个时刻,它将它们与匹配的元素联系起来。

如果要动态添加/更改元素,请使用实时事件:$('...').live('click', yourfunction);

<强>更新

.live()现已弃用;使用$(ancestor).on('click', 'selector', yourfunction)代替ancestor作为已存在的元素或选择器,并包含selector选择的相关元素;模仿.live()你使用document作为祖先。

答案 1 :(得分:1)

听起来你必须做过像

这样的事情
$('#save_post').click(function() { $.post() // save form stuff });

如果是这种情况,更改ID将无效。 click事件绑定到元素本身,而不是ID。所以行为不会改变。

虽然你可以进行实时绑定或取消绑定并重新绑定行为,但我认为最简单的方法就是在同一个地方有两个按钮,而不是你现在正在做的事情,使用jQuery来{{1}他们的显示器。它看起来与用户相同,但您可以单独识别和绑定按钮。

答案 2 :(得分:1)

函数绑定到页面加载(通常)的元素。您可以执行以下操作:

1).unbind()按钮中的“保存”功能,然后绑定新的“编辑”功能。

2)使用jQuery .live()将函数绑定到“编辑”按钮。

3)将函数绑定到父元素单击事件(例如,将“div”元素绑定到按钮)。将事件(类似.click(function(event){...});)传递给该函数,检查是否单击了按钮(if (event.target.nodeName == 'BUTTON')并执行逻辑(if ($(event.target).hasClass('edit')) {....}) 我建议第三种选择:)

答案 3 :(得分:0)

我建议的是,不是使用一个按钮并重命名它来创建两个按钮,并根据当前页面模式显示和隐藏它们。这样,您就不必做任何更改ID的事情,这可能最终会让您感到困惑。