页面上有两个按钮:                <input type="button" id="btn_occur" value="占用" onclick="AcceptOperate(1);" />
                <input type="button" id="btn_occur_cancel" value="取消" disabled="disabled" onclick="AcceptOperate(0);"  />原来我的AcceptOperate函数是这么写的    function AcceptOperate(oper_tag)
    {
            $.get("/Order3/Order_UpdateByOrder_id?order_id=" + escape($V("#tb_order_id").trim()) + "&isOperFlag=" + oper_tag,
              function (up_msg) {
                  if (oper_tag == "1")//占用
                  {
                      if (up_msg == "1")//占用成功
                      {
                          $("#sub_UpdOrder,#sub_UpdOrder2,#sub_UpdOrder3").attr("disabled",false);
                          $("#btn_occur").attr("disabled", "disabled");
                          $("#btn_occur_cancel").attr("disabled", false);
                      }
                      else
                          alert("占用失败!");
                  }
                  else if (oper_tag == "0")//取消
                      if (up_msg == "1")//取消成功
                      {
                          $("#sub_UpdOrder,#sub_UpdOrder2,#sub_UpdOrder3").attr("disabled", "disabled");
                          $("#btn_occur").removeAttr("disabled");
                          $("#btn_occur_cancel").attr("disabled", "disabled");
                      }
              });
    }但是                          $("#btn_occur").attr("disabled", "disabled");这句代码执行却出现问题了,我审查元素看到btn_occur这个按钮单击后设置了disabled="disabled",但是过几秒disabled="disabled"又自己消失了!!!
后来我把代码改为如下就没有问题了    function AcceptOperate(oper_tag)
    {
        $.ajax({
            type: "GET",
            url: "/Order3/Order_UpdateByOrder_id?order_id=" + escape($V("#tb_order_id").trim()) + "&isOperFlag=" + oper_tag,
            async: false,
            success: function (data) {
                if (oper_tag == "1")//占用
                    if (data == '1') {
                        $("#sub_UpdOrder,#sub_UpdOrder2,#sub_UpdOrder3").removeAttr("disabled");
                        $("#btn_occur").attr("disabled", "disabled");
                        $("#btn_occur_cancel").removeAttr("disabled");
                    }
                    else {
                        alert("占用失败!");
                    }
                else
                    if (data == '1') {
                        $("#sub_UpdOrder,#sub_UpdOrder2,#sub_UpdOrder3").attr("disabled", "disabled");
                        $("#btn_occur").removeAttr("disabled");
                        $("#btn_occur_cancel").attr("disabled", "disabled");
                    }
                    else {
                        alert("取消失败!");
                    }
            }        });
    }
虽然问题解决了,但是这个disabled="disabled"自动消失却让我非常不理解,谁能告诉我具体是怎么回事?

解决方案 »

  1.   

    第一种写法可能是AcceptOperate被调用了两次,服务器响应时间比较长,所以出现那种情况。第二种情况是个同步的请求,要等第一次调用执行完才能执行第二次。
      

  2.   

    为什么AcceptOperate可能被调用了两次呢,只是单击了一次按钮?
      

  3.   

    这个不清楚,连接点击两次也不是没有可能,我一般处理点击的时候,是点击后马上把这个元素的click事件移除了,等响应后再重新绑定。有的时候服务器响应慢,用户点了一下,等了会没有反应,他又会点击,可能就会出现你那种问题。
      

  4.   

    甚至我试过把else if (oper_tag == "0")//取消这个分支去掉,也还是这个问题,应该不是执行两次造成的