如何获得选择和快速点击以在移动设备上工作
How to get Chosen and FastClick to work on mobile device
我正在尝试将FastClick添加到已经使用Chosen jQuery插件进行选择的网站。使用 FastClick,选择框只需停止响应移动浏览器上的点击。这也可以通过 Chrome 设备仿真进行复制。
您可以在这个简单的jsFiddle上自己测试:
<select id="foo">
<option>Bar</option>
<option>Asdf</option>
</select>
$("#foo").chosen()
使用丁目金丝雀复制的步骤:
- 加载 http://fiddle.jshell.net/7ftdo0j3/3/show/
- 打开开发人员工具并模拟Google Nexus 7或Apple iPad 1/2(其他工具也可以)
- 尝试使用选择。
您遇到的主要问题是您尝试同时使用两个库,它们都奇怪地操作或解释触摸事件。我想使用短语"两者都通过触摸事件做一些黑魔法",但由于我几乎没有使用相关库的经验,我觉得也许这不合适;)
撇开玩笑不谈,您问题的解决方案是将 FastClick 的 needsclick
类添加到由 selected 动态创建的所有 DOM 元素中:
$("#test").chosen();
$(".chosen-container *").addClass("needsclick");
FastClick.attach(document.body);
至少在我对模拟器的测试中,这似乎有效。我会告诉你为什么我认为它有效。
我注意到当我将needsclick
类添加到div.chosen-container
及其直接子级时,有时触摸会打开下拉列表,有时不会。当添加到所有孩子时,触摸开始完美地工作。我很确定这样的事情会发生在那里:
- "选定"可动态创建模仿下拉列表的
div
元素。 - 当用户触摸这种
div
时,原始最顶层元素在鼠标事件中获取存储- 例如,如果用户触摸下拉列表的正文(这是一个
span
元素),则该元素将存储在事件中
- 例如,如果用户触摸下拉列表的正文(这是一个
- 快速单击仅从此元素检查
needsclick
- 由于动态创建的元素都没有该魔术类,因此将阻止触摸事件,并将单击事件发送到该元素
- 否则这将起作用,但似乎 Chosen 根本不侦听点击事件。您可以通过尝试使用 jQuery 将一个发送到
.chosen-container
来测试这个:
$(".chosen-container").trigger('click');
它不起作用。但是,当您改为发送mousedown
事件时,下拉列表会打开:
$(".chosen-container").trigger('mousedown');
这可能意味着,也许在触摸设备上,Selected 已经直接侦听touchstart
或touchend
事件,这意味着您甚至不需要带有 Selected 下拉列表的 FastClick。不幸的是,我现在没有真正的测试设备,所以我不能保证你的航行有这种幸福的结局:D
我们在一个项目中使用了 Selected,在那里我们也遇到了一些与事件相关的问题。Chosen 的源文件中有很多与事件绑定相关的代码,所以我不得不说我不完全确定那里到底发生了什么。但至少上面的解释在我邪恶的头脑中是有道理的。希望它对您有所帮助,并希望您能再次使用表单。
- 链接don'由于Javascript悬停效果,无法在移动设备上工作
- Phonegap地理定位无法在移动设备上工作
- Jquery.focusout无法在移动设备上工作(slicknav)
- 移动/平板设备定向部分工作
- 当我移动引用three.js的html文件时,three.js停止工作
- AngularJS代码在一个代码笔中工作,但在移动时会中断
- 我将此代码移动到一个单独的函数中,它停止工作,为什么
- 下拉在移动设备上工作很奇怪
- Foundation 5和内容可编辑(移动)不工作
- Bootstrap 3.3-导航栏无法在移动设备上工作
- 我可以'我似乎没有得到我的网站'移动导航开始工作
- 使用jQuery在焦点上选择文本框是't在移动浏览器中工作
- 针对移动设备的JQuery下拉列表没有以应有的方式工作
- 上的jQuery.on('已结束')无法在移动设备上工作
- 如何将img维度从html移动到css并保持此滑块工作
- jQuery 移动按钮无法按预期工作
- window.open()没有'无法在添加到主屏幕的移动Safari web应用程序中工作
- 如何使此应用程序与移动浏览器协同工作
- .stop()不是't使用我的悬停,使快速移动工作-jQuery
- 是否英特尔xdk / Jquery移动工作与Parse.com