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

このコードは、デスクトップ ブラウザーで問題なく動作します。しかし、電話ギャップを使用してモバイル デバイスに展開すると機能しません。

何が問題ですか?

私が試したデバイスは、Samsung Google Nexus S (ICS 4.0.0) iPhone 4 および iPhone 4s (シミュレーター)、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 に答える