2012-08-03 83 views
0

list[i].fnctn - 包含我要附加到單擊事件處理函數的函數的名稱。我有同樣的js文件未附加到移動設備上的動態創建元素的事件

function createList(list){ 
    var parentID = $("#content_nav ul"); 
    var len = list.length; 
    for(var i=0;i<len;i++){ 
     var anchorElement = jQuery('<a />',{text:list[i].text}); 
     var liElement = jQuery('<li />',{"class":"navlink_"+(i+1),id:"navlink_"+(i+1)}); 
     //anchorElement.attr('onclick',list[i].fnctn+"()"); - Works fine on desktop browsers but doesn't work on mobile devices. (Mobile devices are my target platform 

     anchorElement.on('click',{funct:list[i].fnctn},function(event) { 
      return window[event.data.funct](event); 
     }); 
     liElement.append(anchorElement); 
     parentID.append(liElement); 
    } 
} 

此代碼對桌面瀏覽器完全正常的範圍內全局定義這些功能。但是,當我使用電話差距將其部署到移動設備時,它不起作用。

什麼問題?

我試過的設備是 - 三星谷歌Nexus S(ICS 4.0.0)iPhone 4和iPhone 4s(模擬器),Android模擬器。 PS:讓我知道是否有其他更好的方法來做到這一點。我現在正在做的是,我將要從JSON分配給事件處理函數的名稱(作爲字符串),然後使用上面的代碼應用它。我不知道這是否是最佳做法。請幫助:)

+0

你叫代碼之後DOM加載或可能像的parentID項目之前運行呢?加載移動設備需要更長的時間。另外,你是否得到任何腳本錯誤? – jfriend00 2012-08-03 05:01:39

+0

是的,我在'$(document).ready()'中執行此操作... ... 另外,如何檢查設備上的腳本錯誤?我在桌面瀏覽器上看不到任何錯誤... – AdityaParab 2012-08-03 05:04:43

+0

不是使用attr設置事件,而是建議使用綁定方法。另外,由於在頁面準備好後元素被添加到DOM,您將需要使用live方法。我希望這有幫助。 – KutePHP 2012-08-03 05:07:09

回答

1

只需更改代碼的順序:

function createList(list){ 
    var parentID = $("#content_nav ul"); 
    var len = list.length; 
    for(var i=0;i<len;i++){ 
     var anchorElement = jQuery('<a />',{text:list[i].text}); 
     var liElement = jQuery('<li />',{"class":"navlink_"+(i+1),id:"navlink_"+(i+1)}); 
     //anchorElement.attr('onclick',list[i].fnctn+"()"); - Works fine on desktop browsers but doesn't work on mobile devices. (Mobile devices are my target platform 

     // append the target first 

     liElement.append(anchorElement); 
     parentID.append(liElement); 

     // after append then bind the 
     // click event 

     anchorElement.on('click',{funct:list[i].fnctn},function(event) { 
      return window[event.data.funct](event); 
     }); 

    } 
} 
+0

我覺得這個應該這樣做 – ShaunOReilly 2012-08-03 05:03:17

+0

感謝您的回答,我會盡力並相應更新:) – AdityaParab 2012-08-03 05:05:07

相關問題