我知道主题不清楚,但我找不到更好的句子。
我正在构建一个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?
谢谢,
答案 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的事情,这可能最终会让您感到困惑。