Проблема с редактированием на месте jQuery с функцией live (). Нужен ниндзя - PullRequest
1 голос
/ 09 августа 2011

Это, вероятно, легко исправить, но у меня возникают проблемы с оборачиванием моего ума вокруг него ...

Я использую плагин редактирования на месте jQuery для некоторых элементов div, которые будут сгенерированы налетать.Это должно быть просто: нажмите на только что созданный div, и сможете редактировать содержимое.У меня проблемы с live ().

Без использования live () он, очевидно, прекрасно работает для статического div.Нажмите один раз, чтобы получить редактируемое содержимое.

При использовании live (), однако, мне нужно дважды щелкнуть , чтобы редактировать содержимое.Затем в любой следующий раз, когда он нажал, это займет всего один раз.Это что-то вроде фокуса.Может быть, изменение самого плагина поможет?

Вот именно об этом я и говорю ... http://jsfiddle.net/efflux/62CzU/

Это как-то связано с тем, как я звонюфункция editinplace () с live:

$('.editable').live('click',function() {
    //event.preventDefault();
    $('.editable').editInPlace({
        callback: function(unused, enteredText) { return enteredText; },
        bg_over: "#cff",
        field_type: "textarea",
        textarea_rows: "5",
        textarea_cols: "3",
        saving_image: "./images/ajax-loader.gif"
    });  
 });   

Как заставить плагин редактирования на месте нормально функционировать на моих div, созданных с помощью js?

Любая помощь будет признательна !!

Ответы [ 3 ]

2 голосов
/ 09 августа 2011

Он не работает, потому что он не настроен, пока вы не нажмете на него. Как только вы нажимаете на него, вы устанавливаете EditInPlace, который требует его собственного щелчка. Просто сделайте еще один клик после его настройки: http://jsfiddle.net/62CzU/6/

2 голосов
/ 09 августа 2011

Быстрое и грязное исправление: http://jsfiddle.net/62CzU/5/

var $this = $(this),
      isInit = $this.data('edit-in-place');
if(!isInit){
    $('.editable').editInPlace({
        callback: function(unused, enteredText) { return enteredText; },
        bg_over: "#cff",
        field_type: "textarea",
        textarea_rows: "5",
        textarea_cols: "3",
        saving_image: "./images/ajax-loader.gif"
    });
    $this.click();
}
1 голос
/ 09 августа 2011

Демо-версия

Просто измените щелчок кнопок на это.

$("button.btn").click(function() {
    $(".mydiv").prepend('<div class="passage-marker"><div class="annotation editable">it take 2 clicks to edit me, unless I have already been edited</div></div>');

         $('.editable').editInPlace({
            callback: function(unused, enteredText) { return enteredText; },
            bg_over: "#cff",
            field_type: "textarea",
            textarea_rows: "5",
            textarea_cols: "3",
            saving_image: "./images/ajax-loader.gif"
        });  

    });
}

По сути, вы просто привязываете его каждый раз, когда создаете. Причина, по которой у вас возникла проблема с live, заключается в том, что при первом щелчке она связывала ее, а затем при втором щелчке она уже была связана и будет работать.

...