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);
    }
}

此代码在桌面浏览器上运行良好。但是当我使用电话间隙将它部署到移动设备时它不起作用。

问题是什么?

我试用的设备是 - 三星 Google Nexus S (ICS 4.0.0) iPhone 4 和 iPhone 4s (Simulator),Android 模拟器。

PS:让我知道是否有其他更好的方法可以做到这一点。我现在正在做的是,我从 JSON 中获取要分配给事件处理程序的函数名称(作为字符串),然后使用上面的代码应用它。我不知道这是否是最佳做法。请帮忙 :)

4

1 回答 1

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);
        });

    }
}
于 2012-08-03T05:02:17.093 回答