gpt4 book ai didi

javascript - 可编辑传播

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:46:58 24 4
gpt4 key购买 nike

我正在使用 jeditable,并且我将嵌套元素全部绑定(bind)到 jeditable。问题是当我点击嵌套元素时,点击事件会在最顶层的父元素上触发。我怎样才能避免这种情况?

$(document).ready(function() {
console.log('loading');
$('div.wrapper').editable('edit/', {
loadurl : 'edit/',
//id : 'section',
name : 'content',
submitdata : function(value, settings) {
var section = $(this).parent('section').attr("data-section");
return {
section: section,
type: 'ajax',
}
},
loaddata : function(value, settings) {
var section = $(this).parent('section').attr("data-section");
return {
section: section,
type: 'ajax',
}
},
rows : 6,
width : '100%',
type : 'textarea',
cancel : 'Cancel',
submit : 'OK',
indicator : 'Saving changes',
tooltip : "Doubleclick to edit...",
onblur : 'ignore',
event : "dblclick",
style : 'inherit',
callback : function(value, settings) {
// console.log(this);
console.log(value);
console.log(settings);
$('section[class^="annotation"]').each(function(index) {
$(this).attr('data-section', index + 1);
});
}
});
});

[编辑]

这是 HTML 代码:

<article>
<section class="annotation1" data-section="1" id="section_data-section1" typeof="aa:section">
<div class="wrapper" title="Doubleclick to edit...">
<h1>Section </h1>
<p>some content</p>
<section class="annotation2" data-section="2" id="subsection_data-section2" typeof="aa:section">
<div class="wrapper" title="Doubleclick to edit...">
<h2>Subsection </h2>
<p>some more content</p>
</div>
</section>
</div>
</section>
</article>

谢谢!

最佳答案

这比我原先想象的要棘手......

首先,您可以处理div.wrapper.dblclick 事件,这样您就可以停止事件传播。每次双击时,您将 jEditable 附加到元素并触发它(注意调用 .editable() 之后的 .click()。完成元素编辑后,销毁 jEditable 元素。

当我以为一切都结束时,更棘手的事情出现了。当完成编辑外部 div.wrapper 元素时,内部 div.wrapper 中的 dblclick 事件消失了!因此,div.wrapper 元素在成为可编辑元素之前必须被克隆。并且就在 jEditable 恢复包装器元素之后,它被替换为之前存储的克隆。

$('div.wrapper').dblclick(function(event) {
event.stopPropagation();

// save a clone of "this", including all events and data
$(this).data('clone', $(this).clone(true, true))
.editable('edit/', {
onreset: function() {
var $that = this.parent();
$that.editable('destroy');

// restore the editable element with the clone
// to retain the events and data
setTimeout(function() {
$that.replaceWith($that.data('clone'));
}, 50);
}
}).click();
});

查看实际效果:http://jsfiddle.net/william/vmdz6/3/ .

您可能需要在用编辑的数据更新后手动更新克隆的元素。您应该能够在 callback 函数中执行此操作。

关于javascript - 可编辑传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7429583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com