jquery / php中的.closest问题

时间:2011-09-01 13:42:30

标签: jquery

我有一个在.click()中运行的代码,但这只适用于第一行。 我需要使用相同的ID,因为数据是动态生成的 代码完美适用于第一行..并获取TR ID但不适用于第二行左右。

<tr id="25">
    <td>25</td>
    <td>asd</td>
    <td>gjkhgkj</td>
    <td></td>
    <!-- more td's -->
    <td id="edit" name="25">Edit</td>
    <td id="delete" name="25">Delete</td>
</tr>
<tr id="24">
<td>24</td>
    <td>hhh</td>
    <td></td>
    <!-- more td's -->
    <td id="edit" name="24">Edit</td>
    <td id="delete" name="24">Delete</td>
</tr>

删除客户数据的功能:

    $('#delete').click(function(e) {
         var bid = this.id; // button ID 
         var customerid = $(this).closest('tr').attr('id'); // table row ID 

            $.ajax({
           type: "POST",
           url: "delete.php",
           data: "id="+customerid+"",
           success: function(msg){
             // $('#'+customerid).css({backgroundColor: 'red'});
              $('#'+customerid).remove();
              alert("Sucessfully Deleted.")
             // $('#tabledata').load('load.php');       
              }
         });//end of $ajax  

5 个答案:

答案 0 :(得分:1)

  

我需要使用相同的ID,因为数据是动态生成的。

您不能在单个页面上为多个元素使用相同的ID。如果需要动态生成元素,请改用类。

<td class="delete"  name="24">Delete</td>

$('.delete').click(function(e) {

答案 1 :(得分:0)

由于ID必须是唯一的,因此事件仅绑定到ID为“delete”的第一个元素。你想要的是关于那个元素的一个类,而不是再试一次。另一件事,也许父母('tr')比最接近()更有意义。

如果你不能添加一个类而不是一个id(首先有点奇怪),你也可以使用'contains'选择器来查找字符串'delete'。像这样:

$("td:contains('delete')")

答案 2 :(得分:0)

这是因为您使用的是id选择器,它只返回一个元素而不是类选择器。你应该改变你的html并使用类

答案 3 :(得分:0)

您不能使用相同的ID!

ID必须是唯一的。

你不能把它变成一个班级。

或者如果您需要该号码,请将其设为数据属性。

答案 4 :(得分:0)

如果您的ID是数据库ID,必须将其作为AJAX流中的操作,请尝试以下操作:

$('#delete, #edit').click(function(e) {
     var myID = $(this).attr('name');
     var myAction = $(this).html();
     var myRow = $(this).parent('tr');


    alert('You have choosen to ' + myAction + ' the row (' + myID + ').');
});

当然,在那之后,你可以随心所欲地做任何事情;)