如何阻止第二个更改事件在JQuery中触发?

时间:2011-05-06 09:53:13

标签: jquery

我很难找到一种方法,我可以更新输入字段而不用它在IE8中触发第二个更改事件。在FF 3.6中,此代码可以按照我的意愿工作。

我认为从函数事件处理程序返回false会停止触发任何其他事件,但在IE中不会出现这种情况。

这是我到目前为止所尝试的内容:

  1. 在实时事件处理程序中返回false。
  2. 使用bind和event.stopImmediatePropagation()。虽然我想在我正在使用的实际代码中使用live,因为表单元素通过AJAX调用进行交换。
  3. 使用die并在输入字段更新之前和之后再次使用。但我想这个输入字段的更新发生在函数完成之后。
  4. 我有什么明显的遗失吗?我对JQuery很新,所以也许我犯了一个愚蠢的错误:)

    谢谢!

    以下是一些显示问题的测试代码:

        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
        <head>
    
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
    
        <script>
    
        var counter = 0;
    
         $(document).ready(function() {
    
    
            $('.eventHandler').live('change', handleChangeEvent);
    
            });
    
        function handleChangeEvent(event){
    
            //$('.eventHandler').die();
    
            $(this).val(counter++);
    
            //$('.eventHandler').live('change', handleChangeEvent);
    
            return false;
    
        }
    
        </script>
    
        </head>
            <body>
                <form>
                    <input type="text" value="0.00" id="54501" class="eventHandler"/>
                </form>
            </body>
        </html>
    

    回答了我自己的问题

    不允许作为新用户在8小时内回答我自己的问题。所以现在就放在这里

    通过向Dr.Molle更多地解释问题来解决这个问题。总是有办法帮助你解决问题。

    因为当我更新输入字段值时输入仍然具有焦点,当我点击它时会触发另一个“更改”事件。

    因此,如果在更新输入字段值之前删除焦点,则永远不会触发另一个事件。

    我将代码更改为此代码并按照我想要的方式在IE中运行:

        var counter = 0;
    
         $(document).ready(function() {
    
    
            $('.eventHandler').unbind('blur').live('change', handleChangeEvent);
    
            });
    
        function handleChangeEvent(event){
    
    
            $('body').focus();
    
    
            $(this).val(counter++);
            event.preventDefault();
    
    
    
    
            return false;
    
        }
    

    感谢你的帮助Dr.Molle在解释它时帮助我解决了这个问题 - 干杯!!!

1 个答案:

答案 0 :(得分:0)

您可以首先取消绑定已绑定的更改事件:
$('.eventHandler').unbind('change').live('change', handleChangeEvent);