我最近发布了这个问题: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/

10-13 01:47
查看更多