【问题标题】:Unselect last option from multiselect box in iphone从iphone中的多选框中取消选择最后一个选项
【发布时间】:2016-02-26 08:05:44
【问题描述】:

我正在使用以下 jquery 代码来限制多选框中的选择。它在任何 android 设备上都可以正常工作,但在 iphone 中出现问题。

在 iphone 中会显示警报消息,但最后选择的元素没有按预期取消选择。它应该显示选择的 3 个项目,但它显示在 iphone 中发生警报消息后选择的 4 个项目。任何提示表示赞赏。提前致谢。

<select id="mob-industry">
  <option value="1">Web Development</option>
  <option value="2">Architecture</option>
  <option value="3">Software Development</option>
  <option value="4">Hardware</option>
</select>


var last_valid_selection = null;
$('#mob-industry').change(function(event) {
    if ($(this).val().length > 3) {
        sweetAlert("","Only 3 Allowed","info");
          $(this).val(last_valid_selection);
    } else {
          last_valid_selection = $(this).val();
    }
 });

【问题讨论】:

  • 您是否尝试在选择超过 3 个时返回 false?
  • 是的,我试过了,但没有运气:(
  • 还有另一种方法可以使用 $.data 撤消选择。请参考stackoverflow.com/questions/3963855/…
  • 你也试过删除 sweetAlert 吗?如果 iphone 上的 sweetAlert 出现错误,则可能不会执行下一行。
  • 是的,我也删除了它,让我检查一下 $.data

标签: javascript jquery


【解决方案1】:

我猜你的方法来自于:How do you limit options selected in a html select box?

但我认为这是你真正想要/应该使用的:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>

<select id="mob-industry" multiple>
    <option value="1">Web Development</option>
    <option value="2">Architecture</option>
    <option value="3">Software Development</option>
    <option value="4">Hardware</option>
</select>

$('#mob-industry').bind("vmousedown", function(event) {
    var num_selected = $(this).find(":selected").length;
    if (num_selected == 3) {
        var last_selected_value = $(event.target).val();
        var select_array = $(this).val();
        if ($.inArray(last_selected_value, select_array) == -1) {
            alert("YOU SHALL NOT PASS!!!");
            event.preventDefault();
            return false;
        }
    }
});

小提琴(使用 mousedown() 而不是 .bind("vmousedown") 与计算机兼容):https://jsfiddle.net/kpm0yLyt/1/

JsDoIt(移动模拟,虽然在您选择选项时会显示一些奇怪的错误。忽略它。):http://jsdo.it/Macainian/GKxn

哦,顺便说一句,另一种方法(使用 click() 而不是 .bind("vclick") 与计算机兼容):https://jsfiddle.net/m49wr4t1/5/

【讨论】:

  • 这不会阻止选择
  • @Macainian 使用此代码,我可以选择任意数量的选项
  • 好的,我们开始吧。这次修复并测试了它。 :) 还添加了 jsfiddle
  • 大声笑。忘记。改用 touchstart
  • 虽然我不知道有没有touchstart(),但你可能得做on("touchstart" function(){});
猜你喜欢
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
相关资源
最近更新 更多