事件未附加到移动设备上动态创建的元素

时间:2012-08-03 04:59:14

标签: jquery cordova

list[i].fnctn - 包含我要附加到click事件处理程序的函数的名称。我在同一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(作为字符串)分配给事件处理程序的函数的名称,然后使用上面的代码应用它。我不知道那是不是最好的做法。请帮助:)

1 个答案:

答案 0 :(得分: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);
        });

    }
}