<input type="text" name="item" value="" id="item" class="input-xlarge" placeholder="Enter item name or scan barcode" accesskey="i" />@H_301_3@使用Javascript:
$( "#item" ).autocomplete({ source: '<?PHP echo site_url("sales/item_search"); ?>',delay: 10,autoFocus: false,minLength: 0,select: function(event,ui) { event.preventDefault(); $( "#item" ).val(ui.item.value); $('#add_item_form').ajaxSubmit({target: "#register_container",beforeSubmit: salesBeforeSubmit,success: itemScannedSuccess}); } }); setTimeout(function(){$('#item').focus();},10);@H_301_3@当Internet Explorer中的页面加载时,自动完成会发生一个空的术语值,从而产生一堆结果.如果我删除占位符属性,它将按预期的方式运行,直到键入才会发出请求.
如果我删除焦点事件,它也可以在Internet Explorer中使用.但是我需要重点发生在页面加载,所以这不是一个真正的选择.我也想保留占位符的文字.
该元素在safari,firefox和chrome中正常运行(直到打字之前没有请求).
这是一个bug吗?有没有解决方法,所以我可以使用占位符属性?
我总结了2个例子;破碎和固定. 2之间的唯一区别是占位符属性的存在(在破坏的版本中).
破碎的仅在IE中断,并在其他浏览器中按预期的方式运行.
注意:通过断开我的意思是当专注于字段时,自动完成将被激活,当它不应该.
http://blastohosting.com/jquery_ui_autocomplete_bug/broken.html
http://blastohosting.com/jquery_ui_autocomplete_bug/working.html
注意:在这两个例子中,ajax将始终是相同的结果.请忽略这个.
解决方法
自动完成菜单在输入元素(标签)的输入事件上触发.
https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.autocomplete.js行167
如果将此代码放在setTimeout之前
document.getElementById('tags').addEventListener('input',function(ev){alert(ev.target.value);},false);@H_301_3@你会看到ie的本地输入事件被触发元素的焦点.
这不会在chrome上发生.所以这可能不是jquery的bug,而是ie的一个特征.正如您在问题中所述,只有当输入元素具有占位符属性时,才会发生,而没有属性,输入事件不会在焦点上触发.我尝试在焦点之前添加一个事件处理程序来调用preventDefault(),但仍然导致输入事件触发.
autofocus html5属性还会导致输入事件触发.
我尝试将代码封装在一个适当的html / head / body中,但没有任何效果
最后,作为一种解决方法
1)我默认minLength属性为1
minLength: 1@H_301_3@2)在setTimeout中,将minLength的选项设置为0
$("#tags").focus().autocomplete("minLength",0);@H_301_3@这似乎在9.