[英]Adding two click events to the same button only works once
基本上,我试图使按钮能够处理元素的编辑。 我想要它,以便当我单击“ Edit
按钮时,它将文本Save Changes
为“ Save Changes
并添加一个类,该类随后将按钮绑定到另一个单击事件,以便当他们单击“ Save Changes
,它将警告Saved
并更改文字回到Edit
。 它会完美地执行一次。 如果您继续尝试这样做,它将不再添加类或更改文本。
编码:
$(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');
}
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.