2

我只是在学习 JQuery,我坚持以下。

我有一个 HTML 表(由 PHP 创建,显示 MYSQL 查询的结果)。

表格的第一列有一个下拉菜单,允许用户更改单元格的值,并更新数据库。我正在使用 .toggle 和 .post 来完成这项工作。我的问题是只有第一行有效,我相信这是因为我的目标是重复的 ID。

那么,有人可以指出我正确的技术。最大的问题是不知道要问的正确问题....

我是否以某种方式为每一行动态创建唯一 ID?但如果是这样,我如何传递这些,或者让 JQuery 以每一行为目标,并且它的内容是用户选择的?

谢谢

--

4

3 回答 3

2

最好简单地使用类。替换id="class=",然后根据单击的行而不是 id 定位。

var theRow = $(this).closest("tr.myclass");
theRow.doSomething();
于 2013-03-18T14:50:31.690 回答
2

不要从ids的角度来看。从树的 POV 看它。DOM 树中的每个节点都知道它在哪里:它的父节点、兄弟节点、子节点。如果连续发生某事,您可以使用被点击的任何内容的位置来识别您所在的“位置”并以这种方式获取必要的相关数据。

例如

<tr>
   <td>Row 1</td>
   <td><button click="showRowNumber(this);">click</button></td>
</tr>
<tr>
   <td>Row 2</td>
   <td><button click="showRowNumber(this);">click</button></td>
</tr>
<script type="text/javascript">
function showRowNumber(el) {
   alert($(el).prev().text());  // outputs "Row 1" or "Row 2"
}
</script>

没有 ID,只有一些树操作代码。

于 2013-03-18T14:54:52.990 回答
0

正如凯文所说,您需要使用类而不是 id。

在类事件处理程序中,在这种情况下click,使用this这样您专门指的是被单击的元素,如下所示:

$('.toggler').click(function(){

   $(this).append('clicked element id: '+this.id); //will show the unique id for the toggled element
    //$.post(); will want to put your $.post inside to also make use of "this"
});

为了帮助您学习,您也可以在 上执行此操作byTagName,在本例中通过表格单元格 ( td):

$('td').click(function(){

   $(this).append('clicked element id: '+this.id); //will show the unique id for the toggled element
    //$.post(); will want to put your $.post inside to also make use of "this"
});

更多用途this:如果您正在删除或向表中添加行并且需要跟踪您正在处理的行,那么您可以在点击事件中使用 jQuery 或纯 javascript,如下所示:显示您点击的数字行:

$("table tr").click(function(){
    alert('jQuery: '+$(this).index()); //jQuery
    alert('javascript: '+this.rowIndex); //javascript
});

最后,如果页面加载时不存在一行,则需要使用 jQuery 的方法使用事件委托。on()这也可能是您无法单击除第一行之外的其他行的原因。

$(document.body).on('click', "table tr", function(){
    alert('jQuery: '+$(this).index()); //jQuery
    alert('javascript: '+this.rowIndex); //javascript
});
于 2013-03-18T14:54:59.397 回答