2

我有一个在网页开头定义的 javascript 函数。在我的表中单击一行时调用它。

这是我的功能:

    $(".info").click(function(){
        alert($(this).attr('movieid'));
    });

这是我的表格行的样子:

<tr class="info" movieid="123"><td>movie title</td></tr>

现在当我第一次加载页面时显示了该表,我可以单击该行,它将正确调用该函数。我正在尝试为表实现搜索功能。我有 php 脚本返回表行,就像上面的一样,我将它们添加到表中,但是当我单击从 php 脚本返回的行时,不调用 javascript 函数。有谁知道我怎么能做到这一点?我没有运气。

编辑

这是我获取搜索结果的功能:

$.ajax({
        type: "POST",
        url: "www.mysite.com/core/search.php",
        data: { q: search_string},
        cache: false,
        success: function(html){
            $("table#movies").fadeOut();
            $("div#results-container").fadeIn();
            $("div#results").fadeIn();
            $("div#results").html(html);
        }
});
4

7 回答 7

2

您正在动态添加元素,因此在设置点击处理程序时它不会被注册。

$("body").on("click", ".info", function(e) {
   ...
});

body通常可以,但理想情况下,您希望 DOM 元素尽可能靠近您的选择器.info

于 2013-03-28T04:31:00.607 回答
1

你必须这样做:

$("body").on("click", "tr", function(event){
    alert($(this).attr('movieid'));
});

通过添加一个“容器”,它会产生类似.live().

于 2013-03-28T04:21:43.363 回答
1

使用 jQuery 就绪事件

$(document).ready(function() {    
    $(".info").on("click", "tr", function(event){
       alert($(this).attr('movieid'));
   });
});
于 2013-03-28T04:27:27.263 回答
1

添加.ondocument因为您要添加DOM到文档中。

例子

$(document).on('click',".info",function(){
       alert($(this).attr('movieid'));
});
于 2013-03-28T04:33:10.060 回答
0

您的 php 脚本很可能不会将该类添加到表行中。更改它以添加该类。

于 2013-03-28T04:17:43.983 回答
0

感谢大家的帮助。我能够弄清楚.. @jasen 提到您将其声明为身体标签。这是我能够使用的解决方案:

$("body").on("click", ".info", function(event){
   alert($(this).attr('movieid'));
});

也谢谢你 Derek.. 你为未来提供了一些有用的例子。

于 2013-03-28T04:32:47.923 回答
0

首先,指定一个选择器tr.info,现在和将来都将包含所有节点。根据您对帖子的最新编辑,我相信这是table#movies.

然后附加事件on并指定子选择器tr.info

$('table#movies').on('click', 'tr.info', function () {
    alert($(this).attr('movie'));
});

请参阅jsFiddle上的示例

于 2013-03-28T04:34:12.530 回答