javascript - iScroll 4 不适用于表单 <select> 元素 iPhone Safari 和 Android 浏览器

标签 javascript android mobile-safari iphone iscroll4

我正在使用这个 HTML 代码:

<form action="#" method="post">
    <fieldset>
        <label class="desc" id="title10" for="Field10">
            How many children do you have?
        </label>        
        <select id="Field10" name="Field10" class="field select large" tabindex="5">
            <option value="0" selected="selected">0 </option>
            <option value="1">1 </option>
            <option value="2">2 </option>
            <option value="3">3 </option>
            <option value="4">4 </option>
            <option value="5">5 </option>
            <option value="6">6 </option>
            <option value="7">7 </option>
            <option value="8">8 </option>
            <option value="9">9 </option>
        </select>
        <input type="submit" value="Send message" />
    </fieldset>
</form>

<select>不适用于 iPhone 和 Android。当我点击选择框时没有任何反应。

我正在使用产生问题的 iScroll 4。

<script type="application/javascript" src="iscroll-lite.js"></script>
<script type="text/javascript">
    var myScroll;
    function loaded() {
        myScroll = new iScroll('wrapper');
    }
    document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
    document.addEventListener('DOMContentLoaded', loaded, false);
</script>

我认为 this is a solution但我不知道如何实现。

最佳答案

问题是 iScroll 取消了 select 标签的默认行为(如果你问我,这不是一个很好的实现)。

这发生在第 195 行的 _start() 函数中:

e.preventDefault();

如果您将其注释掉,您会注意到 select 标记再次起作用。

但将其注释掉意味着您已经破解了该库,这可能会破坏其他理想的 iScroll 功能。所以这里有一个更好的解决方法:

var selectField = document.getElementById('Field10');
selectField.addEventListener('touchstart' /*'mousedown'*/, function(e) {
    e.stopPropagation();
}, false);

该代码将允许发生默认行为,而不会将事件传播到 iScroll 那里它搞砸了一切。

由于您的 JS 不在任何类似 jQuery 的 onReady() 事件中,因此您必须确保将此代码 AFTER 放在您的 HTML 中 select 元素被定义。

请注意,对于移动设备,事件是 touchstart,但对于您的 PC 浏览器,事件是 mousedown

关于javascript - iScroll 4 不适用于表单 <select> 元素 iPhone Safari 和 Android 浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5745374/

相关文章:

javascript - 如何在运行 Node.js 应用程序之前确保 MySQL 数据库存在

javascript - 根据内容调整 div 的大小

Android:重叠两个 View (故意的!)

iphone - 强制对 aria-hidden 所做的更改在 Mobile Safari 上立即生效

javascript - React redux - componentDidMount 获取与操作

javascript - jQuery - 如何创建可撤消的操作?

android - 解析检索匹配多个不同值的数据

android - coco2d-x : java. lang.IllegalArgumentException: 无法找到 native 库

javascript - 安全错误 : DOM Exception 18 when invoking toDataURL method of the Canvas

iphone - iPhone 5 上的移动版 Safari : Visible area size?