jQuery根据所选选项禁用和启用

jQuery根据所选选项禁用和启用,jquery,html,javascript-events,Jquery,Html,Javascript Events,我已经在很多论坛上进行了切换,并使用了建议的方法,但似乎不起作用。所以我正在寻找第二双眼睛来帮助我发现我做错了什么 这是一个生成表单的cms,我只是编写一个脚本来完成其余的工作。根据用于jQuery的cms,我可以交换名称和id。下面我将显示我的jQuery代码,然后是我试图操作的部分。表单已经禁用了文本框,只是在选择该选项后不会重新启用它 <script type="text/javascript"> $(document).ready(function() {

我已经在很多论坛上进行了切换,并使用了建议的方法,但似乎不起作用。所以我正在寻找第二双眼睛来帮助我发现我做错了什么

这是一个生成表单的cms,我只是编写一个脚本来完成其余的工作。根据用于jQuery的cms,我可以交换名称和id。下面我将显示我的jQuery代码,然后是我试图操作的部分。表单已经禁用了文本框,只是在选择该选项后不会重新启用它

<script type="text/javascript">  
  $(document).ready(function() 
  {
    $("input:text[name=Other]").attr("disabled", true);
      $("select[name=School[]]").change(function() 
      {
      var chk= $(this).val();
        if (chk == 'Other') 
        {
          $("input:text[name=Other]").attr("disabled", false);
        }
      });
  });
</script>

<form id="ouforms" name="ouforms" method="post" class="ldpforms">    
  <select name="School[]">
    <option value="PleaseSelect" checked="checked">(Please Select)</option>
    <option value="BeachPublicSchools">Beach Public Schools</option>
    <option value="BelfieldPublicSchools">Belfield Public Schools</option>
    <option value="BillingsCountyPublicSchools">Billings County Public Schools</option>
    <option value="BowmanCountyPublicSchools">Bowman County Public Schools</option>
    <option value="DakotaHorizonYouthCenter">Dakota Horizon Youth Center</option>
    <option value="DickinsonAdultLearningCenter">Dickinson Adult Learning Center</option>
    <option value="DickinsonCatholicSchools">Dickinson Catholic Schools</option>
    <option value="DickinsonStateUniversityStudents">Dickinson State University Students</option>
    <option value="EarlyChildhoodLeft">Early Childhood Left</option>
    <option value="GlenUllinPublicSchools">Glen Ullin Public Schools</option>
    <option value="HallidayPublicSchools">Halliday Public Schools</option>
    <option value="HebronPublicSchools">Hebron Public Schools</option>
    <option value="HettingerPublicSchools">Hettinger Public Schools</option>
    <option value="HopeChristianAcademy">Hope Christian Academy</option>
    <option value="KilldeerPublicSchools">Killdeer Public Schools</option>
    <option value="LoneTreeGolvaPublicSchools">Lone Tree (Golva) Public Schools</option>
    <option value="MottRegentPublicSchools">Mott/Regent Public Schools</option>
    <option value="NewEnglandPublicSchools">New England Public Schools</option>
    <option value="RichardtonTaylorPublicSchools">Richardton  Taylor Public Schools</option>
    <option value="ScrantonPublicSchools">Scranton Public Schools</option>
    <option value="SouthHeartPublicSchools">SouthHeart Public Schools</option>
    <option value="SWCHS">SWCHS</option>
    <option value="TwinButtesPublicSchools">Twin Buttes Public Schools</option>
    <option value="WestRiverSpecialServices">West River Special Services</option>
    <option value="Other">Other</option>
  </select>
  <br/>
  <label for="Other">Other: </label>
  <input type="text" name="Other" value=""/>
</form>

$(文档).ready(函数()
{
$(“输入:text[name=Other]”)attr(“已禁用”,true);
$(“选择[name=School[]”)。更改(函数()
{
var chk=$(this.val();
如果(chk==‘其他’)
{
$(“输入:text[name=Other]”)attr(“已禁用”,false);
}
});
});
(请选择)
海滩公立学校
贝尔菲尔德公立学校
比林斯县公立学校
鲍曼县公立学校
达科塔地平线青年中心
迪金森成人学习中心
狄金森天主教学校
迪金森州立大学学生
离开幼儿时代
格伦尤林公立学校
韩礼德公立学校
希布伦公立学校
赫廷格公立学校
希望基督教学院
基尔迪尔公立学校
孤树(戈尔瓦)公立学校
莫特/丽晶公立学校
新英格兰公立学校
理查顿·泰勒公立学校
斯克兰顿公立学校
南心公立学校
SWCH
双唇公立学校
西河特别服务
其他

其他:
您应该使用: var chk=$(this.find(':selected').val()

这个怎么样:

$("input:text[name=Other]").attr("disabled", true);
$('select[name="School[]"]').change(function() {
    $("input:text[name=Other]").attr("disabled", ($(this).val() == 'Other') ? false : true);
});​
这将根据是否选择“其他”选项更改文本输入的禁用属性


由于某种原因,
更改
事件绑定未成功。当试图删除代码时,它不起作用

然后我把
select[name=School[]]
改为
select[name='School[]]]]
(注意单引号),它开始工作了

我不知道为什么,这使得选择器有效。因为,我在某个地方读到,如果没有引号,属性选择器应该可以正常工作

不管怎样,我今天也学到了一些东西


谢谢。

您好,首先我要感谢Robertpurpose的代码,当然还有其他人。我按原样尝试了您的代码,但什么也没发生……因此我检查了我的jquery版本或其他脚本是否有问题……但同样没有问题……然后我播放并发现,如果我删除select语句的[],它会起作用……如下所示: 选择[name='School']


希望这对其他人有帮助…

这不是必需的。他的代码(
$(this).val()
)得到了正确的值。是的,你说得对。我没有意识到jquery会从父元素推断出值。酷!它甚至可以简化为,
$(“输入:text[name=Other]”.attr(“禁用”),($(this.val()!=“Other”)它工作了一段时间,然后就神秘地停止了。我通过只使用$(“input:text[name=Other]”)attr(“disabled”,true)来测试它;它使它失效了。我想在那之后有些事情搞砸了。有什么提示吗?@Robertpurpose-这个页面上还有其他JavaScript吗?没有,所有内容都是实际引用的。例如,我们有一个调用脚本的搜索引擎,等等,通过jsFiddle示例可以看出代码是有效的。当你运行代码时,你有没有遇到任何错误?哦,让我试试这个解决方案,因为它一直表现得很奇怪。但是,如何在单引号中嵌入单引号呢?不,我可以是双引号中的单引号
$(“select[name='School[]'”)
,也可以是单引号中的双引号
$('select[name='School[]]”])
。我希望这能起作用……但仍然没有禁用,这很奇怪