承襲前篇,欲將Popup Dialog裡的一個Select Box所有的值,以JSON方式回call父視窗的JavaScript function。但很奇怪的是,若JSON長得像這樣:

[{"username":"Foo","userid":2},{"username":"Bar","userid":1}]

  回到父視窗用SelectBoxes.js的addOption加到SelectBox,userid是value,username是顯示。卻只能加到第二筆,Debug過程看到它是有加第一筆,但加第二筆時,第一筆被remove。反之,把JSON內容順序弄相反,卻能正常兩筆顯示。而Popup視窗裡用的是另一套plugin-multiselect達成>>、>、<、<<功能,但奇怪的是在move時,都會被排序過,最後判斷是Sort問題所造成,所以在Popup Windows的Java Script如下:

function restore() {
    var a2r = $('select[name="account2role"]');
    a2r.sortOptions(false); // SelectBoxes.js的function,設成不排序。
    var data = '[';         // 組成JSON
    a2r.find('option').each(function() {
        if (data.length > 1) data += ',';
        data += '{"username":"' + $(this).text() + '", "userid":' + $(this).val() + '}';
    });
    data += ']';            // 組成JSON完畢
    if (window.dialogArguments != null) {
        window.dialogArguments.callback(data);  // 回撥父視窗的Java Script function
    }
    window.opener = null;
    window.close();
};

  而父視窗的callback作法如下:

function reselectAccount(data) {
    var obj = JSON.parse(data); // 將字串轉成JSON物件
    var selObj = $('select[name="accounts"]');
    selObj.empty();
    $.each(obj, function(i) {
        selObj.addOption(
                obj[i].userid,
                obj[i].username);
    });
};

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Jemmy 的頭像
    Jemmy

    Jemmy Walker

    Jemmy 發表在 痞客邦 留言(0) 人氣()