1

我正在使用 jQuery (AJAX) 加载数据,然后将其加载到表中(因此这发生在页面加载之后)。

在每个表格行中都有一个“选择”链接,允许用户从表格中选择一行。然后我需要获取这一行中的信息并将其放入页面下方的表单中。

$('#selection_table').on('click', '.select_link', function() {
    $('#booking_address').text = $(this).closest('.address').text();
    $('#booking_rate').text = $(this).closest('.rate').val();
});

据我了解,“最近”函数遍历 DOM 树,因此由于我的链接位于每行的最后一个单元格中,它应该从前一行获取元素“地址”和“速率”(这些类被分配给正确的单元格)。

我已经尝试在许多变体中使用快速而肮脏的'alert($(this).closest(etc...')来调试自己,但似乎没有任何效果。

我是否需要对原始页面加载后加载的目标数据采取不同的措施?我哪里错了?

4

3 回答 3

2

.closest()您对如何工作以及如何工作做出了错误的假设.text()。如有疑问,请养成阅读文档的习惯,它对如何使用 jQuery 的特性给出了清晰的描述和示例。

  • .closest()将遍历给定元素的父元素,尝试匹配您提供的选择器。如果您.select_link不在“内部” .address,您的代码将不起作用。

  • 此外,.text()是方法,而不是属性(在语义上,因为方法实际上是 Javascript 中的属性)。x.text = 1;简单地覆盖此元素上的方法,这不是一个好主意,您要调用该方法:x.text(1);.

这些方面的东西可能会起作用:

var t = $(this).closest('tr').find('.address').text();
$('#booking_address').text(t);

如果#booking_address是表单元素,请.val()改为使用它。

如果它不起作用,请提供您正在使用的 HTML 结构(编辑您的问题,使用 jsFiddle 或类似服务),我会帮助您。当提出这样的问题时,提供相关的 HTML 结构无论如何都是一个好习惯。

于 2013-02-22T11:49:29.243 回答
0

您可以尝试使用 parent() 和 find() 函数并直接定位数据, parent() 和 find() 方法的数量取决于您的 HTML。

前任。获取前一行数据

$('#selection_table').on('click', '.select_link', function(){ 
     $('#booking_address').text = $(this).parent().parent().prev().find('.address').text();
});

其中 parent 代表父元素 (tr),然后 prev() 作为上一行并 find 查找元素。

于 2013-02-22T11:50:36.170 回答
-1

某处有代码演示吗?检查您何时调用代码。它应该在 AJAX 调用“成功”之后。

于 2013-02-22T11:48:36.247 回答