现有页面上有三个控件,其中两个下拉列表(checkitem,rule),一个文本框(value):<html:select property="checkitem" styleClass="form_select_on" onchange="changeEditStatus(this.value);">
...
</html:select>
<html:select property="rule" styleClass="form_select_on">
...
</html:select>
<html:text styleClass="form_input_1x" property="value" />我要达到的目的是,当下拉列表checkitem的选项被改变时,触发onchange事件,
根据checkitem的选项值value来设置rule及value为可用或是不可用。
我写的js代码如下:
function changeEditStatus(selectValue){  switch(parseInt(selectValue)){
    //checkitem为2、3、4、5、8时将rule和value设置为不可用    case 2:
    case 3:
    case 4:
    case 5:
    case 8:
    document.getElementsByName("rule").disabled=true;                  //for debug
    alert(document.getElementsByName("rule").disabled);    document.getElementByName("value").disabled=true;  
    break;
    default:
    alert("disabled=false");
    document.getElementByName("rule").disabled=false;
    document.getElementByName("value").disabled=false;
    break;
   }     
  
}调试的时候,我从下拉列表checkitem中选择第二项,alert语句输出值为 true,
但是下拉列表rule以及文本框value依然可用。
我试过在这段JS代码中不做判断,直接将rule和value设置为不可用,依然没有效果。还请高手指点如何来设置可用和不可用属性,应该不需要刷新页面吧?

解决方案 »

  1.   

    将 document.getElementByName 改为 document.getElementById 吧看看 alert(document.getElementsByName("rule").length); 是几?
      

  2.   

    L@_@K
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
      <title> new document </title>
      <meta name="generator" content="editplus" />
      <meta name="author" content="" />
      <meta name="keywords" content="" />
      <meta name="description" content="" />
     </head> <body>
      <select id="checkitem" onchange="changeEditStatus(this.value);"> 
    <option value="-1">请选择</option>
    <option value="1">1 不可用</option>
    <option value="2">2</option>
    <option value="3">3 不可用</option>
      </select>
      <select id="rule">
    <option value="-1">请选择</option>
    <option value="a">a</option>
    <option value="b">b</option>
    <option value="c">c</option>
      </select>
      <input type="text" id="value" />
      <script type="text/javascript">
      <!--
    $ = document.getElementById;function changeEditStatus(selValue)
    {
    switch(parseInt(selValue))

      case 1: 
      case 3:
    $("rule").disabled = true;
    $("value").disabled = true;
    break; 
      default: 
    $("rule").disabled = false;
    $("value").disabled = false;
    break; 

    }
      //-->
      </script>
     </body>
    </html>
      

  3.   

    document.getElementsByName 也可以
    L@_@K
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
      <title> new document </title>
      <meta name="generator" content="editplus" />
      <meta name="author" content="" />
      <meta name="keywords" content="" />
      <meta name="description" content="" />
     </head> <body>
      <select id="checkitem" onchange="changeEditStatus(this.value);"> 
    <option value="-1">请选择</option>
    <option value="1">1 不可用</option>
    <option value="2">2</option>
    <option value="3">3 不可用</option>
      </select>
      <select id="rule">
    <option value="-1">请选择</option>
    <option value="a">a</option>
    <option value="b">b</option>
    <option value="c">c</option>
      </select>
      <input type="text" id="value" />
      <script type="text/javascript">
      <!--
    $ = document.getElementsByName;function changeEditStatus(selValue)
    {
    switch(parseInt(selValue))

      case 1: 
      case 3:
    $("rule")[0].disabled = true;
    $("value")[0].disabled = true;
    break; 
      default: 
    $("rule")[0].disabled = false;
    $("value")[0].disabled = false;
    break; 

    }
      //-->
      </script>
     </body>
    </html>
      

  4.   

    document.getElementById 好像使用不了,指定id会抛异常alert(document.getElementsByName("rule").length);
    输出为1
      

  5.   

    我这里用的都是structs的控件,下拉列表中的选项是从数据库读取的。
    感觉structs控件写JS代码响应比较麻烦。。
      

  6.   


    试过鸟,
        document.getElementsByName("rule")[0].disabled=true;
    成功将rule下拉列表设置为不可用了,但是我再选择checkitem中其他对应为“可用”的选项,rule下拉列表没有反应,还是在不可用状态。另外,
       document.getElementByName("value")[0].disabled=true; 
    直接没有任何效果。
      

  7.   


    试过鸟,
        document.getElementsByName("rule")[0].disabled=true;
    成功将rule下拉列表设置为不可用了,但是我再选择checkitem中其他对应为“可用”的选项,rule下拉列表没有反应,还是在不可用状态。另外,
       document.getElementByName("value")[0].disabled=true; 
    直接没有任何效果。
      

  8.   


    试过鸟,
       document.getElementsByName("rule")[0].disabled=true;
    可以将下拉列表rule设置为不可用,但是当我再从下拉列表checkitem中选择对应为“可用”的选项时,rule没有做出响应,还是不可用状态。而
       document.getElementByName("value")[0].disabled=true; 
    没有反应,文本框value一直处于可用状态
      

  9.   

    建议使用jQuery,主要在于为属性赋值的语句
      

  10.   

    嗯,谢谢。
    这个问题已经解决了,
    getElementsByName我给写成了getElementByName,杯具
    工作的项目中暂时没有到jQuery以后可能会用到吧~