Jquery更改功能无法正常工作

时间:2012-10-08 21:32:42

标签: javascript jquery jquery-selectors

我有相同的ID,名称两个html选择。如果我改变第一个html选择然后它正常工作,但如果我改变第二个html选择那么它是行不通的。请有人指出我在这里做错了什么吗?非常感谢。这是我的代码:

<html>
<head>
<title>the title</title>
 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
   <script type="text/javascript" language="javascript">
  $(document).ready(function() {
      $("#name").change(function(){
          $.post(
             "data.php",
             $("#testform").serialize(),
                 function(data) {
                $('#stage1').html(data);
             }
          );
          var str = $("#testform").serialize();
          $("#stage2").text(str);
      });
   });
   </script>
</head>
<body>
   <div id="stage1" style="background-color:blue; color: white">
          STAGE - 1
   </div>

<form id="testform">
 <table>
 <tr>
 <td><p>Fruit:</p></td>
 <td>
     <select id="name" name="name[]">
         <option>Apple</option>
         <option>Mango</option>
         <option>Orange</option>
         <option>Banana</option>
     </select>
 </td>
</tr>
 <tr>
 <td><p>Fruit:</p></td>
 <td>
     <select id="name" name="name[]">
         <option>Apple</option>
         <option>Mango</option>
         <option>Orange</option>
         <option>Banana</option>
     </select>
 </td>
</tr>
</table>
</form>
</body>
</html>

Php代码:

<?php
$fruit=$_REQUEST["name"];
$n = count($fruit);


for($i=0;$i<$n; $i++)
{
    echo $fruit[$i]."<br/>";
}
?>

4 个答案:

答案 0 :(得分:3)

您的id应该是唯一的 - 使用ID选择器将始终/只能获得ID带来的第一个元素

您可以使用

$('select[name="name[]"]') 

获取您的选择

答案 1 :(得分:1)

那是因为

$("#name")  // id selector

只会选择带有id的第一个元素而忽略第二个元素。

您网页上的ID应该是唯一的。请尝试将其替换为类,而且应该可以正常工作..

$(".name") ; //将您的id =“name”更改为class =“name”而不是

答案 2 :(得分:1)

id属性是唯一的,只能用于选择一个元素。一旦找到第一个,预计不会存在更多。

如果您想将多个元素组合在一起,请使用class属性,该属性可以使用.classname进行定位。

答案 3 :(得分:0)

  1. ID应该是唯一的。原因是,因为javascript只找到遇到“id”的第一个元素。

    $('#name')
    

    上面的选择器代码将选择id为“name”的第一个元素。

  2. 类用于此目的。 Javascript将创建一个元素数组,遇到“class”。

    $('.name')
    

    上面的选择器代码将选择类为“name”的所有元素。这可能是您问题的可能解决方案。也就是说,如果您在两种情况下都更改了两个选择元素中的任何一个,则会触发“更改”事件。