变量为jQuery选择器失败而没有错误

时间:2016-09-13 15:17:45

标签: jquery css

基本形式:

<body>
  <form method="post">
    <select name="details[1234567890123][strComplaintGroup]" id="details[1234567890123][strComplaintGroup]">
      <option value="">Select</option>
      <option value="1">One</option>
      <option value="2">Two</option>
    </select>
    <select name="details[1234567890123][strComplaintDetail]" id="details[1234567890123][strComplaintDetail]">
      <option value="">Select</option>
      <option value="1">One</option>
      <option value="2">Two</option>
    </select>
  </form>
</body>

和jQuery:

$(document).ready(function(){
  $('select').on('change', function(){
    var strId = $(this).attr('id');
    if( strId.indexOf('strComplaintGroup') > 0 ){
      var uniq_id = strId.substring(8,21); // details[<13 char uniq_id>][]
      var strDetail = '#details[' + uniq_id + '][strComplaintDetail]';
      console.log( strDetail );
      $(strDetail).hide();
    }
  });
});

我正在尝试在更改ComplaintGroup时使用更改ComplaintDetail选项。我的变量console.log具有正确的值,但ComplaintDetail Id似乎作为jQuery选择器失败。

我已尝试$('#' + strDetail)并将#放入字符串中。没有运气。

我唯一可以猜到的是[]导致失败。有效名称但不是有效的ID /选择器?正如您所看到的,我必须使用$(this)而不是JS顶部的id。如果是这样,我怎么能克服这个? []是必需的,因为这是一个子表单。

显然猜对了。将[]更改为-以获取ID,并且它可以正常运行。 也许这会帮助其他人,我花了两天时间试图解决这个问题。

1 个答案:

答案 0 :(得分:1)

您使用了无效字符Id

HTML 4

  

ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(&#34; - &#34 ;),下划线(&#34; _&#34;),冒号(&#34;:&#34;)和句号(&#34;。&#34;)。

HTML 5更宽容,只说id必须包含至少一个字符,并且不能包含任何空格字符。

您可以查看What are valid values for the id attribute in HTML了解详情