【发布时间】:2012-03-07 22:19:36
【问题描述】:
我正在使用jQuery UI sortable interaction 和Jeditable。这个想法是用户可以重新排序元素并影响这些元素的内容。我遇到的是,我有 Jeditable 设置来监听的 onblur event 正在被 jQuery 可排序监听器吞噬。
用户可以单击 Jeditable 元素,该元素变为可编辑,但当他们单击可排序的 li 时,将忽略 onblur 事件。如果他们在li 之外单击,则不会忽略该事件。当 Jeditable 在 li 内单击时,如何让 Jeditable 知道模糊事件?
这是jsFiddle illustrating the problem
HTML 标记
<ul class="elementlist">
<li id="elementSk_10">
<span class="editable-element" id="10">TEXT!</span>
</li>
<li id="elementSk_33">
<span class="editable-element" id="33">Some text</span>
</li>
</ul>
可编辑
$('.editable-element').editable('http://jsfiddle.net/echo/jsonp/', {
onblur: 'submit',
width: 250,
indicator: 'Saving...'
});
jQuery UI 可排序
$(".elementlist").sortable({
update: function(event, ui) {
var elementSerialized = $(this).sortable('serialize');
$.post('http://jsfiddle.net/echo/jsonp/', {
elementSk: $(this).sortable('serialize')
});
}
});
编辑: 为了澄清发生了什么,让我一步一步地进行演练并附上屏幕截图。
- 点击
Some Text - 点击包含
TEXT!的li - 释放点击
TEXT!
此时我还没有重新订购任何东西。单击li 并释放并没有触发Jeditable 的onblur。我想要点击离开来触发 onblur 的简单动作。如果我不连接可排序,这就是它的工作原理。我不得不相信 li 的点击被 sortable 吞噬了。
这是另一个重新排序但仍然没有 onblur 的示例。
- 点击
Some Text - 点击包含
TEXT!的li - 将
TEXT!移动到Some Text下方 - 释放对
TEXT!的保留
重新排序元素并释放包含TEXT! 的li 后,onblur 不会被捕获。元素处于新顺序,但 Some Text 仍处于可编辑状态。
这里所说的一切都是我期望发生的:
单击当前正在编辑的字段之外的任何内容都会导致 Jeditable 的 onblur 触发。如果没有连接 jQuery 可排序,这正是发生的情况。当连接 jQuery 可排序以导致 onblur 行为时,我必须在可排序列表元素之外单击。
【问题讨论】:
-
FireFox for Windows,我要么不理解,要么无法重现(使用你的小提琴)。如果我单击 LI 进行编辑并单击其他地方,它会触发(如您所说)。如果我单击 LI 进行编辑并直接单击另一个 LI 进行编辑,它会触发(我相信您表示会失败)。
-
@GregPettit 我的意思是,是的,我可以移动另一个
li,但它不会导致正在编辑的元素被保存。所以 onblur 基本上被忽略了。清如泥? -
差不多。 ;-) 尝试 1.2.3。一步一步地描述要做什么。 ;-) 这是我刚刚尝试过的: 1.单击 LI 使其可编辑 2.单击 OTHER LI 并将其拖动以重新排列顺序 3. 释放鼠标单击。结果:重新排序,但第一个 LI 仍然是可编辑的,并且 onblur 已触发。
-
@GregPettit 我对问题进行了澄清,希望对您有所帮助。作为说明,我已经在 Chrome 17 和 Firefox 10 中进行了测试,并且在这两种浏览器中都有相同的行为。
-
你知道,我认为你一直解释得很好,我只是没那么敏锐。我看到 sortable 的 onblur 触发,而不是 jeditable 的。这正是你一直在说的!很抱歉。
标签: jquery jquery-ui jquery-ui-sortable jeditable