3

根据这两个站点上的说明,我已经成功地将 MarkItUp 与 Jeditable 集成。然而,我真正想做的是让 Jeditable/MarkItUp 编辑窗口出现在厚框或灯箱叠加层中。到目前为止,我这样做的尝试还没有成功。

所以,目前,我有标准代码:

$.editable.addInputType('markitup', {
    element : $.editable.types.textarea.element,
    plugin  : function(settings, original) {
        $('textarea', this).markItUp(settings.markitup);
    }
});

$(".editme").editable("/content/save", {
    event   : 'dblclick',
    type      : 'markitup',
    submit    : 'OK',
    cancel    : 'Cancel',
    width     : 640,
    height    : 'auto',
    tooltip   : 'Double-click to edit...',
    onblur    : 'ignore',
    markitup  : mySettings
});

我在这里找到了其他帖子,这些帖子显示了如何通过单击链接而不是对象本身来触发编辑框,并且我尝试将其与 Thickbox 调用集成,但无济于事。

感谢任何人指出我正确的方向。谢谢!

4

1 回答 1

2

您的问题可能源于 jeditable 和 markitup 的事件不是“实时”事件。

当您(或您的插件)在文档加载时将事件绑定到某些元素时,这些事件仅绑定到当前在 dom 中的元素。如果元素稍后被附加到 DOM(您的页面)(如厚盒/灯箱插件的情况),则事件不会绑定到新的 dom 元素。

解决这个问题,一般情况下是使用jquery的live events。但是由于您正在使用的插件(jeditable 和 markitup)可能正在为您进行绑定,因此您无法直接选择自己实时绑定事件。jquery 实时事件代码通常是这样的:

$('a.cool').live('click',function(){
    // Do something cool
});

在这种情况下,即使元素稍后被添加到 DOM,它仍然会将事件绑定到自身。

您的解决方案是谷歌 jquery live for jeditable & markitup 的主题(我做了但没有找到任何东西)或自己进入他们的代码。我查看了 jeditable ,它在那里非常简单,您需要更改的代码是:

// Change this:
$(this).bind(settings.event, function(e) {
// Into this:
$(this).live(settings.event, function(e) {

而且您还必须更改取消绑定功能:

// change this:
.unbind($(this).data('event.editable'))
// Into this:
.die($(this).data('event.editable'))

该过程可能类似于标记。我没看。

于 2010-04-01T19:16:20.693 回答