1

这是一个愚蠢的问题,但我卡住了。为什么我的第一个有效,而另一个无效 3. 通过阅读文档,所有 4 个都应该完成这项工作。我想在更大的用例中获取表单的一个元素,同一页面上可能有其他元素在其他表单或其他 div 中具有相同的名称,所以第四个选项是我真正想要工作的。但我不明白为什么所有这些都不起作用。

http://jsfiddle.net/7vF5z/1/

html:

 <form id="filter_form_id" name="filter_form" method="get" action="/retrieved_data_records">

 <select id="brand_id" name="brands">
 <option value="0"></option>
 <option value="143272526">Brand1</option>
 <option selected="selected" value="269998788">Brand2</option>
 <option value="330516076">Brand3</option>
 <option value="330516077">Brand4</option>

 </select>
</form>

js:

 alert ("The val: " +  $('#brand_id').val() );    
 alert ("The val: " +  $('brands').val() );  
 alert ("The val: " +  $('#filter_form_id brands').val() );  
 alert ("The val: " +  $('#filter_form_id > brands').val() );  

4

4 回答 4

8

你从哪里得到这些选择器?

  1. $('brands').val()正在寻找nodeNamebrands(都不是)的元素。要检查名称属性,请使用$('[name="brands"]').val()
  2. $('#filter_form_id brands')正在寻找那些nodeName是(都不是)的元素,这些元素是 ID 为(绝对不是)brands的元素的后代。filter_form_id
  3. $('#filter_form_id => brands')完全无效。如果你想要你想要的子选择器$('#filter_form_id > brands')

如需更完整的文档,请查看可用选择器的jQuery 文档

于 2012-04-18T13:02:38.697 回答
2

您的选择器brands就像一个元素名称一样使用。您需要使用属性选择器,例如[name="brands"].

更新的测试用例:http: //jsfiddle.net/7vF5z/3/

alert ("The val: " +  $('#brand_id').val() );    
alert ("The val: " +  $('[name="brands"]').val() );  
alert ("The val: " +  $('#filter_form_id [name="brands"]').val() );  
alert ("The val: " +  $('#filter_form_id > [name="brands"]').val() );  

第四个选项是我真正想要工作的

如果这应该是一个子选择器,那么您需要通过以下方式更正它:

  • 使用正确的子选择器语法
  • 使用属性选择器,如我的示例所示。

没有真正的理由在那里使用子选择器,除非您将name在同一表单中拥有多个具有相同值的控件。

于 2012-04-18T13:01:44.953 回答
2

因为使用纯字符串 like brands,jQuery 会查找具有该名称的标签。而且brands不是标签。否则你能做的是,$('select[name="brands"]').val()

于 2012-04-18T13:03:23.347 回答
1
// OK
alert ("The val: " +  $('#brand_id').val() );
// there is no tag <brands />
alert ("The val: " +  $('brands').val() );  
// there is still no tag <brands />
alert ("The val: " +  $('#filter_form_id brands').val() );
// KO, doesn't mean anything
alert ("The val: " +  $('#filter_form_id => brands').val() ); 
于 2012-04-18T13:05:24.177 回答