jQuery中的Change函数在回发时触发了两次

jQuery中的Change函数在回发时触发了两次,jquery,jquery-selectors,Jquery,Jquery Selectors,我对jQuery1.7.1和回发中的change函数有问题。基本上,我需要切换按钮的禁用属性,这取决于是否在下拉列表中选择了某个项目。在代码中,我有: <input type="button" id="btnRed" value="show Red" disabled="disabled" class="spButton" /> <input type="button" id="btnBlue" value="show Blue" disabled="disabled" c

我对jQuery1.7.1和回发中的change函数有问题。基本上,我需要切换按钮的禁用属性,这取决于是否在下拉列表中选择了某个项目。在代码中,我有:

<input type="button" id="btnRed" value="show Red" disabled="disabled" class="spButton" />
<input type="button" id="btnBlue" value="show Blue"   disabled="disabled" class="spButton"/>
<input type="button" id="btnYellow" value="show Yellow" disabled="disabled"  class="spButton" />

发生回发时,按钮始终处于禁用状态。我用一个启用的按钮进行了测试,它发射了两次。我尝试过不同的方法(bin、unbind)但没有效果。我在SelectedIndex上设置了一个隐藏变量,在代码隐藏中进行了更改,并在jQuery中查询了隐藏变量值,从而解决了这个问题。变更方法是否存在问题?有更好的方法吗?如有任何见解,将不胜感激。谢谢,

如果每次更改值时都进行回发,那么页面将重新加载,jQuery所做的更改将丢失

停止自动回发(将其设置为
false
),或者根据需要将代码从
change
事件更改为
ready
事件

$(function(){
    var selValue = $("#selAccount").val();

    if (selValue == '-1') {
        $(".spButton").attr("disabled", "disabled");
    }
    else {
        $(".spButton").removeAttr("disabled");
    }
});

我在Firefox中测试了这个问题,得到了相同的结果。代码以所需的行为闪烁一次,然后在回发后返回到禁用状态。@joseluisrod,你没有领会我的意思。。我是说根本不要绑定到
change
事件。。只需在
ready
事件中运行代码(启用/禁用按钮的实际代码)。。如果您注意到我的代码,您将看到我已删除
.change
部分。。解决方案是尽可能禁用自动回发。如果不可能,则使用我发布的代码。。
 $(document).ready(function () {
    $("#selAccount").change(function () {
        var selValue = $(this).val();

        if (selValue == '-1') {
            $(".spButton").attr("disabled", "disabled");
        }
        else {
            $(".spButton").removeAttr("disabled");
        }
    });
 });
$(function(){
    var selValue = $("#selAccount").val();

    if (selValue == '-1') {
        $(".spButton").attr("disabled", "disabled");
    }
    else {
        $(".spButton").removeAttr("disabled");
    }
});