在开始之前,我确实理解在一个页面上使用相同的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。
答案 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
属性,在这种情况下看起来最合适,因为你还没有将它用于任何样式。