Заставить Jeditable работать над новыми элементами - PullRequest
0 голосов
/ 27 ноября 2011

Я пытаюсь заставить Jeditable работать с новыми элементами, созданными с использованием этого дерева файлов jquery.

При щелчке правой кнопкой мыши по папке или файлу отображается контекстное меню, а после нажатия пункта «Переименовать» в контекстном меню я хочу активировать Jeditable.

Я использую это контекстное меню и этот код:

$(document).ready( function() {
$('#filetree').fileTree({
    root: '../../../',
    script: './connectors/jqueryFileTree.php',
    expandSpeed: 1000,
    collapseSpeed: 1000,
    multiFolder: true
}, function(file) {
    alert(file);
});

$.contextMenu({
    selector: 'ul.jqueryFileTree > li', 
    callback: function(key, options) {
        var m = "clicked: " + key;
        window.console && console.log(m);
        if(key == 'rename'){
            $('#1').trigger("edit1");
            }
    },
    items: {
        "rename": {name: "Rename", icon: "edit", accesskey: "r"},
        "cut": {name: "Cut", icon: "cut", accesskey: "c"},
        // first unused character is taken (here: o)
        "copy": {name: "Copy", icon: "copy", accesskey: "c o p y"},
        // words are truncated to their first letter (here: p)
        "paste": {name: "Paste", icon: "paste", accesskey: "cool paste"},
        "delete": {name: "Delete", icon: "delete"},
    }
});

/* Bind Jeditable instances to "edit" event. */


$("#1").editable("http://www.example.com/save.php", {
 event: 'edit1',

 });
});

});

Но не работает, я читал в Интернете ( здесь ), что я должен использовать .live (.on () нормально? Так как я использую jquery 1.7.1), но я не знаю почему, ты можешь мне помочь?

1 Ответ

1 голос
/ 27 ноября 2011

вы можете использовать .on() вместо .live(), который работает примерно так же, как метод .delegate(). live немного дороже, так как отслеживает изменения DOM, и для этого приходится повторять, где .on() или .delegate() просто переносят событие на более высокий элемент, такой как document или body.

    $('.editableItem').live('click', function(){
        $(this).editable("http://www.example.com/save.php", {
     event: 'edit1',
     });
   });

Why you have to use live?

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

вот несколько полезных вопросов

Разница между функциями jQuery `click`,` bind`, `live`,` делегат`, `trigger` и` on` (с примером)?

Jquery live () против делегата ()

http://paulirish.com/2010/on-jquery-live/

...