2011-11-27 35 views
0

我試圖讓Jeditable處理使用this jquery文件樹創建的新元素。讓Jeditable處理新元素

右鍵單擊文件夾或文件時會顯示一個上下文菜單,單擊上下文菜單上的「重命名」項目後,我想要激活Jeditable。

我使用這個上下文菜單,this代碼:

$(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', 

}); 
}); 

}); 

但不工作,我讀過的網頁(here),我應該使用.live(。上關於()的好嗎?因爲我使用jquery 1.7.1)但我不知道爲什麼,你能幫我嗎?

回答

1

您可以使用.on()代替.live(),它的工作方式與.delegate()方法類似。 live會有點昂貴,因爲它會跟蹤DOM的變化,因爲它必須迭代,因爲.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()

這裏處理一些有用的問題

​​3210

Jquery live() vs delegate()

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

+0

的問題是,「重命名」項目被點擊時,它發送一個回調函數,我不知道哪個DOM元素會這樣是當我不能說點擊 –

+0

它幾乎適用於on(),但它需要你點擊兩次。第一次點擊將初始化。可編輯,第二次點擊將編輯該字段。如何避免這種雙擊? – bart