使用jquery多个相同ID的同一页面

时间:2011-06-30 16:07:25

标签: php jquery

在开始之前,我确实理解在一个页面上使用相同的ID一个以上的元素是无效的,但这是我提出的解决此问题的最佳方法...

我在一个页面上有几个生成的表,每个表的每一行都可以使用每行按钮进行编辑或删除。这些按钮我附加了ID,因此我可以很容易地知道我正在编辑/删除的对象的ID是什么。保存到数据库时这很有效,但是当我尝试使用JQuery动态更新表行时会出现问题。

以下是编辑按钮对话框保存功能的代码示例:

//find the edit button so we can get the row this item is in
var editButton = $("#theTable").add("editButtonClass").add("#"+id);
var row = editButton.parents('tr:first');
//update the current page with new row data
row.find(":eq(0)").text(name);
row.find(":eq(1)").text(value);

如果页面上只有一个表,这可以正常工作,但由于有很多表,其中一些按钮最终具有相同的ID(我在db表中使用自动增量),此函数将更新它找到ID的第一行,实际上忽略了我的$(“theTable”)。add(“editButtonClass”)选择器!

对此有任何想法都会有所帮助!


信息:我还使用了以下选择器来获取编辑按钮和id,它适用于一个表但不包含多个具有相同ID的表:

var findButtonStr = "#" + id + ", editButtonClass";
var editButton = $(findButtonStr);
var row = editButton.parent().parent();

生成的表可能如下所示:

<table id="theTable">
  <tr><td>name</td><td>value</td><td><a id="1" class="editButtonClass">Edit</a> / <a id="1" class="deleteButtonClass">Delete</a></td></tr>
  <tr><td>name</td><td>value</td><td><a id="2" class="editButtonClass">Edit</a> / <a id="2" class="deleteButtonClass">Delete</a></td></tr>
</table>

我可能在一个页面上有几个这样的表,这意味着会有几行按钮具有相同的ID。


编辑:感谢您的downvote!如果您对问题有疑问,请告诉我,我会解决它。

3 个答案:

答案 0 :(得分:2)

如果编辑/删除按钮包含在您要执行操作的行中,为什么不在按钮单击事件中使用$(this)

$('.editButtonClass .deleteButtonClass').click(function() {
    var $row = $(this).closest('tr');

    $(document).data('editRow', $row);
    // call dialog, have the dialog save code do this:
    //    var $row = $(document).data('editRow');
    // and then perform operations on $row
});

编辑:

在HTML代码中删除类中的前导点。 class="editButtonClass"就是你想要的。遵循正确的语法!

答案 1 :(得分:0)

在Jquery中这个选择器

 $("#theTable").add(".editButtonClass")

始终只返回具有该ID的第一个对象。如果您需要选择多个对象。你必须使用其他选择器。如果您向我们展示您的完整标记,我们可能会帮助您更好地

编辑 - 看看你的标记这是你需要的,我想

$('.\\.editButtonClass').click(function(){
   var name = $(this).closest('tr').find(":eq(0)");
    var value = $(this).closest('tr').find(":eq(1)");
   alert(name.html());  
   alert(value.html());
});

在这里查看小提琴http://jsfiddle.net/UJGeP/1/(名称和值是您需要的td,我提醒他们的价值以显示已经选择了正确的td)

答案 2 :(得分:0)

除了重复之外,我很确定ID也不能以数字开头。

无论如何,为什么不使用data属性,在这种情况下看起来最合适,因为你还没有将它用于任何样式。