当有html 5占位符属性时,jQuery UI自动完成在Internet Explorer中的字段焦点上触发

HTML

<input type="text" name="item" value="" id="item" class="input-xlarge" placeholder="Enter item name or scan barcode" accesskey="i"  />

使用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);

当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将始终是相同的结果.请忽略这个.

这里的问题是Internet Explorer处理输入事件的方式.
自动完成菜单在输入元素(标签)的输入事件上触发.
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);

你会看到ie的本地输入事件被触发元素的焦点.
这不会在chrome上发生.所以这可能不是jquery的bug,而是ie的一个特征.正如您在问题中所述,只有当输入元素具有占位符属性时,才会发生,而没有属性,输入事件不会在焦点上触发.

我尝试在焦点之前添加一个事件处理程序来调用preventDefault(),但仍然导致输入事件触发.

autofocus html5属性还会导致输入事件触发.

我尝试将代码封装在一个适当的html / head / body中,但没有任何效果

最后,作为一种解决方法

1)我默认minLength属性为1

minLength: 1

2)在setTimeout中,将minLength的选项设置为0

$("#tags").focus().autocomplete("minLength", 0);

这似乎在9.

翻译自:https://stackoverflow.com/questions/20790121/jquery-ui-autocomplete-triggered-on-field-focus-in-internet-explorer-when-there

转载注明原文:当有html 5占位符属性时,jQuery UI自动完成在Internet Explorer中的字段焦点上触发