【问题标题】:jQuery UI Multiselect Next - onChange - remove all, add alljQuery UI Multiselect Next - onChange - 全部删除,全部添加
【发布时间】:2012-09-13 11:37:49
【问题描述】:

我有 jQuery UI Multiselect Next http://quasipartikel.at/multiselect_next 我想在选择发生任何变化时触发一个事件。

这个例子有效:

<script type="text/javascript">

$(function(){
$("#countries").multiselect();          
$('#countries').multiselect({ selected: function(event, ui) {change(); } });
$('#countries').multiselect({ deselected: function(event, ui) {change(); } });
});         

function change(){
alert('CHANGE');
}

</script>

当我从列表中移动一个元素时,函数 change() 被调用。 主要问题是当我按“全部删除”或“全部添加”时,因为该函数被多次调用(元素数量)。

当我按下“全部删除”或“全部添加”时,是否可以只调用一次函数change()

谢谢。

【问题讨论】:

    标签: javascript jquery jquery-ui multi-select


    【解决方案1】:

    我找到了解决办法:

    打开 ui.multiselect.js

    在 selectAll 函数中添加以下行:

    this.element.trigger('change');

    在 selectNone 函数中添加以下行{

    this.element.trigger('change');

    添加以下行停止功能

    that.element.trigger('change');

    HTML:

    <script type="text/javascript">
        $(function(){       
            $("#countries").multiselect();          
            $('#countries').bind('change', function() {alert('Change'); });
            });
    </script>
    

    【讨论】:

      【解决方案2】:

      我不确定。但你试试jquery.one()

      $("#foo").one("click", function() {
        alert("This will be displayed only once.");
      });
      

      【讨论】:

      • 是的,我找到了Solution See this edit。请告诉我是对还是错。
      • bug 太多了。尝试拖放或反复按下按钮添加/删除。
      • 对不起老板,你错了我会测试我认为你错了检查链接。
      • multiselect 中的这个错误,但我会解决你的问题。插件不是我的问题。
      • 我需要调用函数 multiselect_change();每次我移动项目或按下按钮,但只有 1 次移动或点击。在您的示例jsfiddle.net/GDuRn/1 中,当输入值=1 时,该函数将被忽略。
      【解决方案3】:

      您可以使用某种计时方案来过滤掉额外的调用。让我们假设一个真实的人每 100 毫秒不能多次触发选中或取消选中的事件。您可以执行以下操作:

      var lastChange = 0;
      
      function change() {
      
        //get current date, then the number of milliseconds since 1/1/1970
        var curr_date = new Date();
        var n = cur_date.getTime();
      
        //compute the difference.
        var diff = n - lastChange;
      
        //update our last change variable.
        lastChange = n;
      
        //if we're within 100 milliseconds of the last call, ignore.
        if (diff < 100)
           return;
      
        //proceed as normal.
        alert('change!');
      }
      

      您可以调整这样的算法以满足您的需求,我以 100 毫秒为例。我不确定是否有更简洁的方法来执行此操作,因为您基本上是在尝试过滤来自 UI 控件本身的事件。

      【讨论】:

      • 使用你的函数,当我按下“全部删除”时,该函数被调用两次而不是一次:jsfiddle.net/GDuRn
      • 听起来像是一个异步问题。您可能需要添加一个信号量以防止它运行两次。同样,这不是一个很好的解决方案,但它可能会奏效。
      • 找到了一个相关的stackoverflow帖子:stackoverflow.com/questions/4185910/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2018-02-22
      • 2019-02-05
      • 2012-01-04
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      相关资源
      最近更新 更多