2011-09-15 51 views
0

我需要使用live文件準備好的功能。jquery - 現場準備好

我試過這段代碼:(這並不正常工作

謝謝你的建議。

$(document).live('ready', function() { 

$(".icons").contextMenu(
       { 
        menu: 'menuIcons'      
       }, 
       function(action, el, pos) 
       { 
        contextMenuWork(action, el, pos); 
       }); 

function contextMenuWork(action, el, pos) { 
      switch (action) { 
       case "open": 
        { 
         alert("open"); 
         break; 
        } 
      } 
      } 


}); 
+0

爲什麼你需要讓它變得「活」? – Dennis

+0

通過Ajax加載內容。 – Jenan

+0

準備只在開始時被觸發一次。 AJAX調用不會觸發另一個「就緒」事件。 – Dennis

回答

1

試試這個:

function contextMenuWork(action, el, pos) { 
    switch (action) { 
    case "open": { 
     alert("open"); 
     break; 
    } 
    } 
} 
$(".icons:not(.live)").live('click',function(e){ 
    if (e.which === 2) { 
    e.preventDefault(); 
    $(this).addClass('live').contextMenu({ 
     menu: 'menuIcons'      
    }, 
    function(action, el, pos) { 
     contextMenuWork(action, el, pos); 
    }).trigger({type:'mousedown',button:2}).trigger({type:'mouseup'}); 
    } 
}); 

使用後期綁定綁定到當元素是正確的點擊事件;然後重新觸發右鍵單擊事件。

1

$(document).live()並沒有真正意義,因爲只能有一個document,它永遠不能無需重新加載頁面重新創建。

要撥打:

$(document).ready(function() {... 

如果document DOM對象已經被加載,jQuery將立即調用你的函數。

+0

我需要使用live,因爲通過Ajax加載數據。 – Jenan

+0

@Janan你不能多次指出,ready事件只會被調用一次;當頁面加載時。使用.live與它沒有任何意義。你究竟在做什麼? –

1

在你的AJAX代碼時,當你知道什麼樣的數據,你可以在插件綁定上的數據時,已將其添加到DOM

(function() { 
    var contextMenuWork = function(action, el, pos) { 
     switch (action) { 
      case "open": 
      { 
       alert("open"); 
       break; 
      } 
     } 
    }; 

    $.ajax({ 
     url: myUrl, 
     success: function(data) { 

     $("body").replaceWith(data); // Example! 

     $(".icons", data).contextMenu({ 
      menu: 'menuIcons'      
     }, function(action, el, pos) { 
      contextMenuWork(action, el, pos); 
     }); 

     } 
    }); 
})();