0

所以我试图在处理javascript时禁用一个按钮,然后在javascript完成后重新启用它。下面的代码适用于我尝试过的所有浏览器,除了 IE7。在 IE7 中,它似乎只是忽略了禁用和重新启用,并且看起来它仍然一直处于启用状态。那么如何才能在 IE7 中获得正确的行为呢?

    <script>
      function doSomething()
      {
        document.getElementById("myButton").disabled = true;
        ...
        xmlhttp = new XMLHttpRequest();
        xmlhttp.open("GET", url, false);
        xmlhttp.send(null);
        response = xmlhttp.responseText();

        if (response != "false")
        {
          document.getElementById("myButton").disabled = false;
        }
        ...
      }
    </script>
    <form onsubmit="doSomething(); return false;">
      <input type="submit" id="myButton" value="Do Stuff"/>
    </form>
    <div id="results"></div>
4

3 回答 3

1

disabled不是真/假切换。如果您想在禁用某些内容后启用它,您可以disabled完全删除该属性。

设置:document.getElementById("myButton").setAttribute("disabled","disabled");

清除:document.getElementById("myButton").removeAttribute("disabled");

于 2013-03-26T20:07:11.010 回答
0

所以这是 IE7 的重绘问题,所以在执行所有操作之前都不会重绘。因此,经过更多的研究和多次尝试让 IE 在我想要的时候重绘它,这最终奏效了,这真的很糟糕,我希望找到一种更好的方法来做到这一点,但它现在有效。

<script>
  function doSomething()
  {
    document.getElementById("myButton").disabled = true;
    setTimeout(doSomething2(), 1);
    return false;
  }

  function doSomething2()
  {
    xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", url, false);
    xmlhttp.send(null);
    response = xmlhttp.responseText();
    document.getElementById("results).innerHtml = response;
    setTimeout(doSomething3(), 1);
    return false;
  }

  function doSomething3()
    document.getElementById("myButton").disabled = false;
    return false;
  }
</script>
<form onsubmit="doSomething(); return false;">
  <input type="submit" id="myButton" value="Do Stuff"/>
</form>
<div id="results"></div>
于 2013-03-27T20:43:17.217 回答
0

您需要将该disabled = false部分放入 ajax 响应处理程序中:

function doSomething() {
  var btn = document.getElementById("myButton");
  btn.disabled = true;

  var xhr = new XMLHttpRequest();
  xhr.open("GET", url, false);
  xhr.send(null);
  var response = xhr.responseText;

  // Test this stuff!
  alert(response);

  btn.disabled = false;

  // Test more!
  alert(btn.disabled);
}
于 2013-03-26T22:32:17.053 回答