2011年7月20日星期三

The dropdownl list default value issu in IE of jqGrid cell eding

The dropdownlist in jqGrid cell edit has an issue in IE.

Let's see what happens

In jqGrid js file
var oSv = options.value;
} else if (typeof options.value === 'object') {
    var oSv = options.value;
    for ( var key in oSv) {
        if (oSv.hasOwnProperty(key ) ){
            ov = document.createElement("option");
            ov.setAttribute("role","option");
            ov.value = key; ov.innerHTML = oSv[key];
            
            
            // this line set option to be selected and the selectedIndex is correct
            if (!msl &&  ( $.trim(key) == $.trim(vl) || $.trim(oSv[key]) == $.trim(vl)) ) { ov.selected ="selected"; }
                        
            
            if (msl && ($.inArray($.trim(oSv[key]),ovm)>-1 || $.inArray($.trim(key),ovm)>-1)) { ov.selected ="selected"; }
            elem.appendChild(ov);
        }
    }
}

// before this line the selectedIndex is correct
setAttributes(elem, options);
// but after this line the selectedIndex is incorrect
The problem must be setAttributes(elem, options);
function setAttributes(elm, atr) {
    var exclude = ['dataInit','dataEvents','dataUrl', 'buildSelect','sopt', 'searchhidden', 'defaultValue', 'attr'];
    $.each(atr, function(key, value){
        if($.inArray(key, exclude) === -1) {
            $(elm).attr(key,value);
        }
    });
    if(!atr.hasOwnProperty('id')) {
        $(elm).attr('id', $.jgrid.randId());
}
Notice this line
$(elm).attr(key,value);
The key is "value" and the value is "{RMB:'RMB', USD:'USD', EUR:'EUR', AUD: 'AUD', GBP:'GBP', SGD: 'SGD'}"

Here is the problem. We can add key "value" to exclude array.

Now the functions reads
function setAttributes(elm, atr) {
    var exclude = ['dataInit','dataEvents','dataUrl', 'buildSelect','sopt', 'searchhidden', 'defaultValue', 'attr'];
    $.each(atr, function(key, value){
        if($.inArray(key, exclude) === -1) {
            $(elm).attr(key,value);
        }
    });
    if(!atr.hasOwnProperty('id')) {
        $(elm).attr('id', $.jgrid.randId());
}
It works well now.

没有评论:

发表评论