2015-04-21 231 views
11

我有一个包含一些输入字段的页面。这个页面的数据不用表单提交就可以发送到服务器。我有一个收集数据的JavaScript,创建一个JSON并使用Ajax调用将其发送到服务器。HTML输入自动完成

在这种情况下,问题在于浏览器不保存数据,以便在用户下次填写相同表单时提供自动完成功能。

有什么办法可以避免这种情况?我需要一种提供自动完成的方法!任何诡计?

+0

希望这可以帮助你http://stackoverflow.com/questions/15462991/trigger-autocomplete-without-submitting-a-form –

+1

你可能需要详细说明这个问题。您是希望每个用户下次再看到相同的数据,还是希望所有用户都能在自动填充中查看相同的数据。根据答案,anhnv或MuppetGrinder的答案可能是最好的。 – JLo

+0

我指的是浏览器自动完成机制。当用户返回表单时,浏览器在您双击或在输入字段上开始输入时,会显示您在该字段中输入的所有值(我认为它在某些浏览器中称为形式历史记录,如Firefox) –

回答

1

当附加了一个实际的表单并且它的提交事件被实际触发时(即使数据是由AJAX发送的),我发现自动完成工作。我建议使用带有提交按钮的表单,并通过Javascript拦截提交(附加到表单的onsubmit事件)以阻止它并通过AJAX执行。

使用合适的HTML表单并阻止提交,而不是仅使用输入字段,还可以在用户按下Enter时激活您的onsubmit处理程序。我发现这对用户非常有用。

+1

'autocomplete'的默认值是'on'。所以,我不认为这会有所作为。 –

+0

你说得对。当你想禁用它时,_autocomplete_作为“off”属性更有用。已经更新了我的答案。 – Sidd

2

您是否尝试过Trigger autocomplete without submitting a form中列出的方法。这对我有效。

基本上触发一个窗体的提交按钮的点击并获取表单以在隐藏的iframe中打开一个空白页面。这显然是一个黑客,但它确实单击表单提交按钮,提交表单等自然打开了新的一页它在每次我在检查浏览器

引述例如标记的位置:

<iframe id="remember" name="remember" class="hidden" src="/content/blank">  
</iframe> 

<form target="remember" method="post" action="/content/blank"> 

    <fieldset> 
    <label for="username">Username</label> 
    <input type="text" name="username" id="username" value=""> 
    <label for="password">Password</label> 
    <input type="password" name="password" id="password" value=""> 
    </fieldset> 

    <button id="submit-button" type="submit" class="hidden"></button> 

</form> 

然后在通过ajax处理表单时通过$("#submit-button").click()触发提交。

4

我使用html5浏览器存储这些东西。有一个相当不错的介绍here这允许在大多数现代浏览器的客户端数据持久化。您可以使用它来捕获表单数据并随时重新渲染它。使用jQuery

function DefaultCtrl($scope) { 
 
    $scope.names = ["john", "bill", "charlie", "robert", "alban", "oscar", "marie", "celine", "brad", "drew", "rebecca", "michel", "francis", "jean", "paul", "pierre", "nicolas", "alfred", "gerard", "louis", "albert", "edouard", "benoit", "guillaume", "nicolas", "joseph"]; 
 
} 
 

 
angular.module('MyModule', []).directive('autoComplete', function($timeout) { 
 
    return function(scope, iElement, iAttrs) { 
 
      iElement.autocomplete({ 
 
       source: scope[iAttrs.uiItems], 
 
       select: function() { 
 
        $timeout(function() { 
 
         iElement.trigger('input'); 
 
        }, 0); 
 
       } 
 
      }); 
 
    }; 
 
});
<div ng-app='MyModule'> 
 
    <div ng-controller='DefaultCtrl'> 
 
     <input auto-complete ui-items="names" ng-model="selected"> 
 
     selected = {{selected}} 
 
    </div> 
 
</div>

自动完成http://jsfiddle.net/sebmade/swfjT/

希望这有助于你:

2

你可以试试这个!

+3

除非我错过了OP的问题中没有提及Angular,否则这个答案似乎取决于OP没有提及的工具。 – Roy