Sno*_*Kim 52 javascript jquery jquery-ui jquery-ui-autocomplete ios7
使用jQuery 2.1.0和jQuery.ui 1.11.0在iOS 7中测试.iPhone和iPad Mini.适用于Android和常规浏览器.
我们最近从jQuery UI 1.10.0升级到1.11.0,现在,当点击自动完成结果列表中的项目时,您只能获得悬停,您必须再次单击相同的元素才能获得点击事件.这曾经适用于版本1.10.0.
(评论中的JSFiddle链接)
使用CSS {cursor: pointer}不起作用
使用onclick=""不起作用
(评论中的JSFiddle链接)
但这里有趣/奇怪的部分.它适用于JSFiddle 编辑视图,但不适用于JSFiddle"/ show"页面.
JSFiddles :( 键入一个字母显示结果"s"是一个很好的)
我已经在这方面工作了好几天,但在测试只有html视图之前无法在JSFiddle中重现它.所以现在我转向你.我不能为我的生活弄清楚为什么一个页面触发点击事件,而另一个页面没有.
我正在使用jQuery自动完成的最基本功能.实际上,使用jQuery UI主页上显示的完全相同的代码.
那么,如何在/ show页面上单击iOS中的一次点击才能获得自动完成功能?
(我会在评论中发布其他链接,因为我还没有10个代表.除非我没有足够的代表评论......)
小智 48
稍后,但是
$("#input").autocomplete({
open: function(event, ui) {
$('.ui-autocomplete').off('menufocus hover mouseover mouseenter');
}
});
Run Code Online (Sandbox Code Playgroud)
San*_*ile 21
由于一些奇怪的原因,@onlydimon's答案对我不起作用.好像我们确实需要活动mouseenter.以下答案对我来说效果很好.
open: function (result) {
if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
$('.ui-autocomplete').off('menufocus hover mouseover');
}
},
Run Code Online (Sandbox Code Playgroud)
我添加了一个条件,以确保它不会在其他设备中中断.
小智 13
以onlydimon的解决方案为基础:
var input = $("#input")
// Initialize autocomplete
input.autocomplete()
// Retrieve the autocomplete list and remove the mouseenter event
// which seems to trip up iOS Safari
input.autocomplete('widget').off('mouseenter')
Run Code Online (Sandbox Code Playgroud)
我将事件列表缩小到jQuery的'mouseenter'事件.只删除这个修复了我的错误.此外,每次打开列表时都不需要删除它; 一次就够了.
写了一个超级讨厌的黑客,这似乎对我有用。这就是我所做的。
(可选)再试一次...以防设置的时间不够长,元素无法获得 ui-state-focus 类。
$('.autocompleteContainer').on('touchstart', 'li.ui-menu-item', function(){
var $container = $(this).closest('.autocompleteContainer'),
$item = $(this);
//if we haven't closed the result box like we should have, simulate a click on the element they tapped on.
function fixitifitneedsit() {
if ($container.is(':visible') && $item.hasClass('ui-state-focus')) {
$item.trigger('click');
return true; // it needed it
}
return false; // it didn't
}
setTimeout(function () {
if (!fixitifitneedsit()) {
setTimeout(fixitifitneedsit, 600);
}
}, 600);
});
Run Code Online (Sandbox Code Playgroud)希望有人有更好的解决方案!