2013-01-06 131 views
-2

HTML的片段(与选择):jQuery的VAL()返回不同的结果

   <table id='xxx'> 
        <tr> 
         <td> 
          <select id="obj_z" name="abc_obj_x" style="width: 200px"> 
           <option value="XXXX" >---</option> 
           <optgroup label="cer"> 
            <option value="BBBB"> QQQQ2</option> 
           </optgroup> 
           <optgroup label="car"> 
            <option value="AAAA"> QQQQ1</option> 
           </optgroup> 
          </select> 
         </td> 
         <td> 
          <select id="abc"> 
           <option value="BBBB1"> QQQQ1</option> 
           <option value="BBBB2"> QQQQ2</option> 
           <option value="BBBB3"> QQQQ3</option> 
          </select> 
         </td> 
        </tr> 
       </table> 

JS代码:

 main_table_id = '#xxx'; //TABLE ID   

     $("#obj_z").change(function() 
     { 
      alert($(main_table_id + ' select').eq(0).val()); // GET selected option value (way by eq) 
      alert($('#obj_z').val()); // GET selected option value - Direct way 
     }); 

我是否会选择选项QQQQ2

我们的结果:

First alert : X 

Second alert : BBBB 

我怎么能通过第一次警报真正价值?


原因:浏览器保留旧文件。

解决方案:HOLD CTRL + F5。 (清洁浏览器缓存),而我们的浏览器加载最新版本的文件

我们选择选项QQQQ2

我们的结果是:

First alert : BBBB 

Second alert : BBBB 
+1

为什么不是$(this).val()? tr和td在哪里? – mplungjan

+0

不是,因为我想从表中获得所有选择值:) 它是一个示例:) –

+0

但为什么在我的浏览器中返回其他值:)? –

回答

4

您有无效的标记那里。 select元素不能是table元素的直接后代。

通过添加适当的trtd元素来修复您的HTML,使您的脚本按预期工作。

<table id='xxx'> 
    <tr><td> <!-- open row and cell element --> 
     <select id="obj_z" name="abc_obj_x" style="width: 200px"> 
      [...] 
     </select> 
    </td></tr> <!-- close cell and row element --> 
</table> 

Original - Fixed


我希望失踪tr/td是在OP的一部分俯瞰,但因为它是与代码的唯一问题发表我提出这个作为一个答案。尽管如此,请务必禁用缓存或按Ctrl + F5开发和测试代码时。

+0

感谢您的建议,我忘记了tr,当时我正在重写代码:) –

+1

当然。 JSfiddle实际上每天都停止为我工作。 '=]' –

+0

接受谢谢浪费一些时间:) –