iT邦幫忙

0

想請問我使用window.open呼叫另一個網頁傳值回來,值為一個json

{"B_ID":["123456789","987654321"],"PAGE":"B"}

程式會依照對應陣列中的值去勾選對應的checkbox,但將陣列轉出後用
JQ的$.each()或js的for(),在電腦上執行都正常可以跑正常的次數,但是我用手機去測試卻都只能跑一次只有一個值,如果將陣列寫死卻又可以正常執行 想請問為甚麼??
var BIDArr=json.B_ID; $.each(BIDArr,function (index) { $("#GT"+BIDArr[index]).prop("checked",true); $("#GT"+BIDArr[index]).parent().parent().css({"background-color":'#BBFF00'}); });

2 個回答

1
japhenchen
iT邦高手 1 級 ‧ 2020-07-16 12:02:29
最佳解答

json跑for或$.each 的"列舉"是 [ ]

所以你的server丟回來的應該是

[
    {"B_ID":["123456789","987654321"],"PAGE":"B"},
    {"B_ID":["323456789","xxxxxaaaa"],"PAGE":"C"},
];

打個比方
用JQ的each

$.post({  ............ })
    .done(function(data){
        $.each(data,function(i,v){
            // 當物件用
            console.log( v.B_ID );
            console.log( v.PAGE );
            //或是用具名陣列也通
            console.log( v['B_ID'] );
        };
    });

所以你的js
$("#GT"+BIDArr[i]).prop("checked",true);
要這樣改
(如果你改成陣列來EACH的話)
$("#GT"+ v.B_ID ).prop("checked",true);

ke11vin30 iT邦新手 5 級 ‧ 2020-07-16 13:41:46 檢舉

謝謝japhenchen的回答~剛剛發現手機部分會自動在每個號碼後面多加空白trim後已解決~但不懂的地方為電腦跟手機一樣的程式碼為甚麼會有不同的結果

1
浩瀚星空
iT邦超人 1 級 ‧ 2020-07-16 13:16:48

可以將

$.each(BIDArr,function (index) { 
    $("#GT"+BIDArr[index]).prop("checked",true);
    $("#GT"+BIDArr[index]).parent().parent().css({"background-color":'#BBFF00'}); 
});

改成

$.each(BIDArr,function (index,bid) { 
    $("#GT"+bid).prop("checked",true);
    $("#GT"+bid).parent().parent().css({"background-color":'#BBFF00'}); 
});

去試試

ke11vin30 iT邦新手 5 級 ‧ 2020-07-16 13:42:43 檢舉

謝謝星空大的回答~剛剛發現手機部分會自動在每個號碼後面多加空白trim後已解決~但不懂的地方為電腦跟手機一樣的程式碼為甚麼會有不同的結果

你這是其它地方的問題吧?
我沒那麼神通。有辦法知道。

我要發表回答

立即登入回答