向同一按钮添加两次单击事件只能工作一次
Adding two click events to the same button only works once
基本上,我试图使一个按钮能够处理元素的编辑。我希望它,当我单击"编辑"按钮时,它将文本更改为"保存更改"并添加一个类,该类然后将按钮绑定到另一个单击事件,以便当他们单击"保存更改"时,它会提醒"已保存!"并将文本更改回编辑。它完美地完成了一次。如果您继续尝试这样做,它根本不会再添加类或更改文本。
这是一个关于jsfiddle的演示
代码:
$(function() {
$button = $('button[name="edit"]');
$button.on('click', $button, function() {
var $that = $(this);
$that.text('Save Changes');
$that.addClass('js-editing');
if ($that.hasClass('js-editing')) {
$that.off('click').on('click', $that, function() {
alert('Saved!');
$that.text('Edit');
$that.removeClass('js-editing');
});
}
});
});
试试这个 http://jsfiddle.net/bpD8B/4/
$(function() {
$button = $('button[name="edit"]');
$button.on('click', $button, function() {
var $that = $(this);
if($that.text()=='Edit'){
$that.text('Save Changes');
$that.addClass('js-editing');
}
else{
alert('Saved!');
$that.text('Edit');
$that.removeClass('js-editing');
}
});
});
在调用 off() 后,您永远不会重新添加原始处理程序,这会将其删除。
话虽如此,使用两个按钮,使用适当的单击处理程序,然后使用 hide() 和 show() 交替使用哪个按钮可用可能会更容易。 对于最终用户来说,它的外观和行为应该完全相同,对你来说,编码会少得多。
示例:http://jsfiddle.net/VgsLA/
我认为最后,这段代码更健壮且易于管理。
这只是一个逻辑问题。有了$that.off('click').on('click', $that, function() {
,你就是在委托给自己,这不是你应该这样做的方式。
下面是使用您的代码的解决方案:
$(function() {
$button = $('button[name="edit"]');
$button.on('click', $button, function() {
var $that = $(this);
if ($that.hasClass('js-editing')) {
alert('Saved!');
$that.text('Edit');
$that.removeClass('js-editing');
} else {
$that.text('Save Changes');
$that.addClass('js-editing');
}
});
});
演示
相关文章:
- Jquery.点击事件不'更改事件后无法工作
- 当我更改innerHtml时,引导选项卡事件不再工作
- IE8更改文本区域上的事件侦听器不工作
- xPages标签onclick事件不'不要在空白处工作
- JQuery只检查了一次事件工作
- now.js-对象没有方法,但在jquery中单击事件工作
- Jquery Click 事件工作两次
- 单击时事件不作为委派事件工作
- 如何在 angularjs 中使用点击事件工作
- Javascript;CSS:隐藏滚动条,保持滚动事件工作
- Onclick事件工作不正常.node.js中的
- 单击主页上的事件工作,但不起作用并发布页面
- 我如何获得多个独立的文档.Onkeydown事件工作
- 广播事件-工作良好的服务器端,但不是在客户端
- AngularJs Ng-Keypress事件工作错误
- 使我的点击双击事件工作
- Jquery Ajax成功不会触发,而是完成事件工作
- jQuery不能为按钮事件工作
- 是JavaScript事件工作,如果我使用jQuery
- Javascript onclick事件工作显示,但不隐藏