【问题标题】:How do I make a select .change event not fire until it loses focus (using jquery preferably)?如何使 select .change 事件在失去焦点之前不会触发(最好使用 jquery)?
【发布时间】:2010-02-12 19:33:51
【问题描述】:

我有一个使用 dropdownchecklist jquery 插件的选择框。我只想在选择框失去焦点后触发更改事件。

在选择列表中的项目时,jquery .change 事件会立即为选择框触发。在我的情况下,由于可以选择多个项目,我只希望在失去焦点后触发更改,假设甚至选择了新项目。

我以为我可以进行某种链接,例如 $('#MySelect').change().blur(...) 或某种嵌套之类的东西,但我真的无法让它像这样工作我会期待的。

有什么想法吗?

【问题讨论】:

    标签: jquery events select


    【解决方案1】:

    也许您只想为 blur 事件提供一个处理程序而完全忽略 change 事件。然后,您必须自己跟踪更改。一个建议是让 change 事件简单地更新一个变量,告诉您发生了更改,而无需执行任何其他操作。然后模糊事件可以这样做:

     $('#yourselect').blur(function(){
         if(changesOccurred){
            //do something about it
            changeOccurred = false;
         }
    
     });
    
    
     $('#yourselect').change(function(){
         changeOccurred = true;
    });
    

    【讨论】:

      【解决方案2】:

      你应该能够做到这一点。

      $('select').focus(function() {
          $(this).data( 'startValue', $(this).val() );
      }
      
      $('select').change(function(event) {
          event.preventDefault();
      });
      
      $('select').blur(function() {
          if ( $(this).data('startValue') == $(this).val() ) {
              //nothing has changed
          } else {
              //something's different
          }
      }
      

      【讨论】:

        【解决方案3】:

        当下拉列表更改时,change 事件会被触发。你无法改变它(在那种情况下多么有趣的一句话)。
        您必须设置您的代码,以便通常应该在 change 上执行的所有功能都在 blur 事件上执行。

        更新:如果你提供一些代码和解释什么时候应该执行,它会更容易帮助你。

        【讨论】:

        • 是的,我知道,但我不希望这一切都发生在模糊事件中。我不希望每次下拉模糊时都发生部分回发,我只希望在进行实际更改时运行特定代码。在不知道它是否既模糊又改变的情况下,我不知道何时运行代码。
        猜你喜欢
        • 1970-01-01
        • 2014-08-16
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 2019-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多