0

このjqueryファイルツリーを使用して作成された新しい要素でJeditableを機能させようとしています。

フォルダまたはファイルを右クリックすると、コンテキスト メニューが表示され、コンテキスト メニューの [名前の変更] 項目をクリックした後、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を使用する必要があることをWeb(ここ)で読みました(jquery 1.7.1を使用しているので.on()は大丈夫ですか?)が、理由がわかりません。助けて?

4

1 に答える 1

1

メソッドのように機能.on()する代わりに使用できます。live は DOM の変更を追跡するため、少しコストがかかります。そのために、 のどこで反復するか、単にイベントをや のような上位の要素に委譲する必要があります。.live().delegate().on().delegate()documentbody

    $('.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`、`delegate`、`trigger`、`on` 関数の違い (例付き)?

Jquery live() と delegate()

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

于 2011-11-27T12:01:50.300 に答える