【发布时间】:2014-01-01 22:07:01
【问题描述】:
我有几行带有文本,我可以通过用输入替换行内联来“编辑”它们,输入从行中获取文本作为其值属性。
当输入失去焦点时,恢复之前的文本。
当按下回车键(keyCode 13)时,新文本被保存并写入行中。
现在,对于不知道按回车键保存文本的用户,我想在输入字段旁边添加一个“保存”按钮。但是当按下它时,输入字段的模糊事件首先被触发,丢弃更改。
那么有没有一种简单的方法,按钮的 .click() 事件可以取消输入字段上的 .blur() 事件?也许是“不执行其他事件”,或者我可以在模糊事件中看到,接下来会调用哪些事件来取消它?
这是一个 jsfiddle 来了解我的意思:http://jsfiddle.net/ykY5X/ (我在 Firefox(最新的 Nightly)中工作,按钮单击不起作用。我刚刚也在 chrome 中测试了 jsfiddle,keyup 也无法按预期工作。)
$('#showEdit').click(function() {
$('#row').data('text',$('#row').text());
$('#row').html('<input type="text" id="editInput" /> <span id="editSave">Save</span>');
$('#editInput').val($('#row').data('text')).focus();
});
$('#row').delegate('#editInput','keyup',function(e) {
e.stopPropagation();
var keycode = e.keyCode || e.which;
if (keycode == 13) $('#editSave').click();
}).delegate('#editSave','click',function(e) {
e.stopPropagation();
$('#row').text($('#editInput').val());
}).delegate('#editInput','blur',function() {
$('#row').text($('#row').data('text'));
});
【问题讨论】:
-
你不能在用户点击编辑时保存值,然后在 onblur 时再次保存,然后保存按钮功能比较两个值,如果它们不同,将其更改为最后保存的值从模糊开始?
-
是个好主意!不幸的是,
click事件不会触发,只要blur事件删除按钮。它只触发按钮的mousedown事件。有了一些临时数据,效果很好:) 谢谢! -
很高兴我可以提供一种您可以使用的方法:)
标签: javascript jquery events