jqGrid和Firefox自动完成冲突

时间:2011-04-08 09:57:01

标签: ajax jquery jqgrid

我在下面的代码中构造了一个jqGrid:

function radio(value, options, rowObject){
    var radio = '<input type="radio" value=' + value + ' name="radioid" />';
    return radio;
}

function reloadOnEnter(){
    jQuery(':input[name=field1]').keyup(function(e){
        if(e.keyCode == 13){
            var fieldValue = jQuery(':input[name=field1]').attr('value');
            jQuery(':input[name=field1]').attr('value', fieldValue);
            jQuery("#listTable").jqGrid().trigger("reloadGrid");
        }
    });
}

    jQuery(function(){
    jQuery("#listTable").jqGrid({
    url: '$content.getURI("myURI")' + '?userId=$userId&pageNo=0&locale=' + '$locale',
    datatype: 'json',
    mtype: 'POST',
    colNames:['column1', 'column2', 'column3', 'column4', 'column5'],
    colModel :[
        {name:'name', index:'field', width:'8%', search:false, align:'center', formatter: radio, editable:false, sortable: false, resizable:false},
        {name:'name1', index:'field1', width:'23%', sortable: false, resizable:false},
        {name:'name2', index:'field2', width:'23%', sortable: false, resizable:false},
        {name:'name3', index:'field3', width:'23%', sortable: false, resizable:false},
        {name:'name4', index:'field4', width:'23%', sortable: false, resizable:false}
        ],
    width:'768',
    height: 500,
    pager: '#pagerDiv',
    gridview: true,
    rowNum: $rowNr,
    rowTotal: 500,
    sortorder: 'desc',
    viewrecords: true,
    loadComplete: loadCompleteHandler,
    ignoreCase: true
    });
});

jQuery(function(){
    jQuery("#listTable").jqGrid('filterToolbar',{
                        stringResult: true,
                        searchOnEnter: false });
});

我开始输入'他'并且自动完成窗口显示'你好'(因为我之前输入了你好)。我选择'hello'然后按Enter键,仍然'a'在ajax请求中提交。

我的reloadOnEnter函数由loadCompleteHandler调用。有趣的是,当我查询搜索字段(field1)时,值是选定的值,但只在请求中发送了键入的值。我想发送选定的值。我怎样才能做到这一点?

修改loadCompleteHandler看起来像这样:

function loadCompleteHandler(){
    reloadOnEnter();
    jQuery("#listTable").jqGrid('setGridHeight', Math.min(500,parseInt(jQuery(".ui-jqgrid-btable").css('height'))));
}

(我使用Apache Velocity作为模板引擎!这就是为什么我在javascript代码中有$variable之类的变量!)

1 个答案:

答案 0 :(得分:0)

对于您的主要问题:您应该使用jQuery.val函数而不是jQuery.attr('value')

您的代码中的许多其他内容使我感到奇怪或不清楚。我不清楚如何在reloadOnEnter中使用loadCompleteHandler。如果包含相应的代码片段会很好。 url的值似乎也很奇怪。您使用searchOnEnter: false filterToolbar reloadOnEnter选项,但在if(e.keyCode == 13)中等待'Enter'键。在jQuery(':input[name=field1]').attr('value')的正文内部,您获得{{1}},然后将相同的值设置回来。为什么呢?

或许你可以在问题的文本中描述一下你想用代码存档的内容吗?