你好 StackOverflow 社区!
我目前正在开发我自己的用于内联编辑的 jQuery 插件,因为那些已经存在的插件不符合我的需求。
无论如何,我想为用户提供以下关于编辑应该如何工作的(布尔)选项:
- 提交按钮
- reset_on_blur
假设用户想要一个提交按钮(submit_button = true)并希望内联输入元素在失去焦点后立即被删除(reset_on_blur = true)。这会导致为按钮注册一个 onClick 处理程序,并为输入元素注册一个 onBlur 处理程序。
然而,每次用户单击按钮时,也会触发 onBlur 处理程序并导致离开编辑模式,即在 onClick 事件发生之前。这使得提交变得不可能。
仅供参考,编辑模式下的 HTML 如下所示:
<td><input type="text" class="ie-input" value="Current value" /><div class="ie-content-backup" style="display: none;">Backup Value</div><input type="submit" class="ie-button-submit" value="Save" /></td>
那么,如果在激活提交按钮时焦点丢失,有什么方法可以检查 onBlur 处理程序,以便在触发提交按钮的 onClick 事件之前不会离开编辑模式?
我还尝试注册一个 $('body').click() 处理程序来模拟模糊并能够追溯单击了哪个元素,但这也不起作用并导致了相当奇怪的错误:
$('html').click(function(e) { // body doesn't span over full page height, use html instead
// Don't reset if the submit button, the input element itself or the element to be edited inline was clicked.
if(!$(e.target).hasClass('ie-button-submit') && !$(e.target).hasClass('ie-input') && $(e.target).get(0) != element.get(0)) {
cancel(element);
}
});
jEditable 使用以下代码。不过,由于延迟,我不喜欢这种方法。更不用说我什至不明白为什么会这样。;)
input.blur(function(e) {
/* prevent canceling if submit was clicked */
t = setTimeout(function() {
reset.apply(form, [settings, self]);
}, 500);
});
提前致谢!