javascript有时无法启用/禁用textarea控件

时间:2011-05-24 00:02:50

标签: javascript

OI。我生成html和javascript以便在c#webbrowser中使用,我正在通过firefox使用firebug进行调试。

function able(id,ckd) {
  if(document.getElementById) {
    var el = document.getElementById("answer"+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="answer" id="answer1">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="answer2.disabled=!this.checked;comment2.disabled=!this.checked;" />&nbsp;Active</td>
      <td><textarea name="answer" id="answer2" 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很长但形式良好,我在测试时小心避免使用缓存页面。第二种方法(ask2.onchange使用内联javascript)的效果不如第一种方法(ask1.onchange调用头部定义的javascript函数)。 id计数器(即,询问“1”,询问“2”,询问“3”等)并且答案和注释innertext值来自数据库或通过webbrowser输入。有一个一致的失败点,萤火虫穿过它就好像它有效,但它失败了。如果我在完整数据失败点之前和/或之后删除表行,则失败点会移动。一旦失败,页面的其余部分也会失败。

请告知我可能在哪里调试此pima。

1 个答案:

答案 0 :(得分:0)

更改事件与单选按钮一起使用并不是一个好主意。根据W3C HTML 4.01规范,onchange事件:

  

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

IE以这种方式为所有表单控件工作 - 您需要修改控件,然后单击其他地方使其失去焦点,以便调度change事件(如果状态更改)。如果点击更改了按钮的状态,其他浏览器将调度更改事件,不需要失去焦点。

使用onclick监听器并根据是否检查控件执行某些操作要好得多。

上述内容可能会或可能不会解决您的问题。据我所知, able()函数没有理由不起作用,只需将onchange更改为onclick