Ajax jqGrid和Firefox自动完成冲突
我有一个jqGrid,如下代码所示:Ajax jqGrid和Firefox自动完成冲突,ajax,jquery,jqgrid,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){
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 });
});
(我使用ApacheVelocity作为模板引擎!这就是为什么我在javascript代码中有像
$variable
这样的变量!)回答您的主要问题:您应该使用函数而不是jQuery.attr('value')
代码中的许多其他东西让我感到奇怪或不清楚。我不清楚如何在loadCompleteHandler
中使用ReloadOnner
。如果包含相应的代码片段,则If将很好。url
的值在我看来也很奇怪。您还可以使用filterToolbar
的searchOnEnter:false
选项,但在reloadenter
中等待“回车”键。在if(e.keyCode==13)
的主体内部,您将获得jQuery(':input[name=field1]').attr('value')
,然后将相同的值设置回原位。为什么?
也许您可以在问题的文本中进一步描述您希望用代码归档的内容?我已经用源代码更新了问题,因此您可以看到loadCompleteHandler方法。URL的值很奇怪,因为我使用Velocity引擎来解析它,因此我使用特殊变量,如“content”变量。我没有设置SearchOneNoter,因为我希望它在没有“Enter”的情况下刷新网格,并且在按下“Enter”时也刷新网格。jQuery.val和jQuery.attr之间有什么区别?@Atticus:您将您的主要问题描述为:“我开始键入“he”,自动完成窗口显示“hello”(因为我以前键入了hello)。我选择“hello”并按enter键,但ajax请求中仍会提交“he”。“您发布的代码没有自动完成功能,因此主要部分未发布,无法使用代码重现您的问题并帮助您。你应该发布更多完整的代码。此外,您当前的代码还有另一个重要缺陷,它使绑定到
keyup
不再是一次。每次按键都会多次调用该函数。感谢您指出此错误。正如我看到的,这是因为网格在重新加载后重新加载,绑定再次发生。我得把这个修好。关于autocomplete,我弄错了正确的词,因为我没有提到jQuery autocomplete,而是提到了Firefox特性,当您单击它时,它会显示先前为字段输入的值的列表。(这个名字叫什么?!?)没有更多的代码可以发布了。这个问题是由我称之为(错误地)自动完成的Firefox功能引起的。你写了关于自动完成的文章。在代码中,您将field1
绑定到jQuery UI autocomplete的哪个位置?@Oleg:我可能弄错了正确的单词,当我说autocomplete时,我指的是Firefox功能,当您单击它时,它会显示先前为该字段输入的值列表(这个名称是什么?!?)。我没有使用jQuery自动完成功能!
function loadCompleteHandler(){
reloadOnEnter();
jQuery("#listTable").jqGrid('setGridHeight', Math.min(500,parseInt(jQuery(".ui-jqgrid-btable").css('height'))));
}