javascript有时无法启用/禁用文本区域控件

javascript sometimes fails to enable/disable textarea controls

本文关键字:文本 区域 控件 启用 javascript      更新时间:2023-09-26

oi。我生成html和javascript以在c#web浏览器中使用,并通过firefox使用firebug对其进行调试。

function able(id,ckd) {
  if(document.getElementById) {
    var el = document.getElementById("answerswer"+id);
    el.disabled = ckd;
    el = document.getElementById("comment"+id);
    el.disabled = ckd;
  }
}

用于对抗

<html><head><style type="text/css"></style></head><body><form>
  <table>
    <tr>
      <td><input name="asked" id="asked1" type="checkbox" checked onchange="able('1',!this.checked);" />&nbsp;Active</td>
      <td><textarea name="answerswer" id="answerswer1">Some big, fat answer.</textarea></td>
      <td><textarea name="comment" id="comment1">Some snarky comment.</textarea></td>
    </tr>
    <tr>
      <td><input name="asked" id="asked2" type="checkbox" onchange="answerswer2.disabled=!this.checked;comment2.disabled=!this.checked;" />&nbsp;Active</td>
      <td><textarea name="answerswer" id="answerswer2" disabled></textarea></td>
      <td><textarea name="comment" id="comment2" disabled></textarea></td>
    </tr>
  </table>
  <input name="save" type="button" onclick="window.external.UpdateCandidateQuestions();" value="save" />
  <input name="reset" type="reset" value="reset" />
</form></body></html>

真正生成的html是LONG,但格式良好,在测试时我小心地避免缓存页面。第二种方法(asked2.onchange使用内联javascript)的效果不如第一种方法(tasked1.onchange调用head中定义的javascript函数)。id计数器(即,询问"1"、询问"2"、询问的"3"等)以及答案和注释innertext值要么来自数据库,要么通过web浏览器输入。有一个一致的失败点,firebug在其中穿行,就好像它工作了一样,但它失败了。如果在完整数据失败点之前和/或之后删除表行,则失败点会移动。一旦失败,页面的其余部分也会失败。

请告诉我在其他地方可以调试这个pima。

使用带有单选按钮的change事件很少是个好主意。根据W3C HTML 4.01规范,onchange事件:

当控件丢失时发生输入焦点及其值自获得关注以来进行了修改。http://www.w3.org/TR/html401/interact/scripts.html#adef-onchange

IE对所有表单控件都是这样工作的——你需要修改控件,然后单击其他地方使其失去焦点,这样就可以调度一个更改事件(如果状态发生了更改)。其他浏览器会发送一个更改事件。如果点击改变了按钮的状态,它不需要失去焦点。

最好使用onclick监听器,并根据控件是否被检查来执行一些操作。

以上内容可能会也可能不会解决您的问题。就我所见,没有理由不使用able()函数,只需将onchange更改为onclick即可。