我最近发布了这个问题:jqgrid edit form autocomplete="off" by default, how to change to autocomplete="on",因为我注意到默认情况下jqGrid编辑表单为所有输入元素提供了autocomplete="off"
属性。我认为这是Web浏览器无法实现jqGrid编辑表单通常的自动填充功能的原因。解决此问题并使所有输入元素具有autocomplete="on"
属性后,jqGrid编辑表单仍然没有自动填充。
有谁知道为什么自动填充不适用于这些表格?表单是通过ajax提交的,所以我不确定这是否会影响它。
只是为了清楚起见,我不是,而是,而是jQuery's autocomplete()
。我说的是一种内置在表单自动填充功能中的现代网络浏览器(Chrome,FF)。
例如,请转到我的jsfiddle示例表单here。您可以使用所需的任何内容填写表格,然后单击submit
。刷新页面,然后再次填写。您的浏览器应该记住,并建议刚在第一次填写的值。这就是我发生的事情。
另一方面,如果转到jqGrid编辑示例here。选择一行,然后单击小的编辑按钮(看起来像铅笔)。您不能更改第一个字段,但是可以更改其他字段。将您想要的内容放在其他字段中,然后单击submit
。刷新页面,然后重试。我从许多计算机以及FF和Chrome浏览器中看到的是,此表单确实不记得的任何过去的条目。
这是问题,您是否遇到同样的事情?如果是这样,您是否知道是否可以使这些jqGrid表单与浏览器的自动填充功能兼容?
谢谢!
最佳答案
尽管所有浏览器以略有不同的方式处理表单字段的存储和自动完成,但它们都依赖于提交的表单来存储表单字段本身的值。当jqGrid通过AJAX处理表单时(更新按钮是一个链接,而不是提交按钮),表单本身从未真正提交过,从而也不允许浏览器存储字段值供以后通过自动完成使用。
强制浏览器存储字段值的一种方法是创建一个<iframe />
,克隆<form />
,将克隆的<form />
附加到<iframe />
中,然后将其作为AJAX表单提交过程的一部分进行提交。
例如,您的JSFiddle的修改后的版本。
在上面的示例中,填写“标准表单”并提交,重新加载页面,并且字段将按预期自动完成。填写“AJAX表单”,然后提交,重新加载页面,并且字段不会自动完成。最后,填写“AJAX + iFrame表单”并提交,重新加载页面,字段现在应该自动完成。
*注意:以上示例已在Chrome,Safari和Firefox上进行了测试。您的里程可能会有所不同。
为了完整起见,以下是相关代码:
$('#iframe_submit').bind('submit', function(e){
e.preventDefault(); // Prevents Standard Submit
// Do AJAX Stuff Here...
// Create Clone of Form, Append to iFrame and Trigger Submit
// This Forces Autocomplete to Register
var $clone = $('#iframe_submit').clone();
$clone.attr('id', 'iframe_clone'); // Only One ID Allowed
$('<iframe />').appendTo('body').contents().find('body').append($clone);
$('iframe').contents().find('#iframe_clone').submit();
});
我希望这有帮助!
关于jquery - jqgrid编辑表单失去了浏览器自动填充功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12412363/