一个href点击不在jquery中触发

时间:2015-01-06 16:50:20

标签: javascript jquery

        $(function() {

            $.getJSON("companies.json", function(response) {

                var html = '<table id="tbl">';
                response.businesses.forEach(function(row) {
                    html += '<tr><td><a href="#" class="move" idname="' + row.id + '">' + row.id + '</a></td><td>' + row.name;
                });
                html += '</table>';

                $("#tabledata").html(html);
            });


            $(".move").click(function() {

                var $id = $(this).attr("idname");

                $.getJSON("companies.json", function(response) {


                    $.map(response.businesses, function(obj) {
                        if (obj.id == $id)
                            console.log(obj);
                        return obj; // or return obj.name, whatever.
                    });
                });
            });
        });

HTML:

    <div id="tabledata" class='left'></div>
    <div class="right"></div>

请帮帮忙?

4 个答案:

答案 0 :(得分:2)

如果您使用事件委派,您的问题就会消失(您的应用程序会变得更高效,并且更不容易出现内存泄漏)。

// Only do this once, when your page loads...
$(document.body).on('click', '.move', function (ev) {
    // This is the link that was clicked.
    var $targ = $(ev.target);
});

答案 1 :(得分:2)

当您的.move元素动态添加到您的网页时,您必须使用jQuery's on() method 委托将事件发送到.move的祖先首次加载JavaScript时确实存在的元素。

$(document).on('click', '.move', function() { ... });
  

事件委托允许我们将单个事件侦听器附加到父元素,该元素将为匹配选择器的所有后代触发,无论这些后代现在是存在还是将来添加。

您可以阅读有关jQuery事件委派here的更多信息。

答案 2 :(得分:0)

试试这个

$('#tabledata').on('click', '.move', function(e) { ... });

答案 3 :(得分:0)

未触发事件的原因是,当您调用.click()方法时,事件仅添加到页面上存在的元素。

相反,您可以使用事件委派:

$(document.body).on('click', '.move', function (ev) {
    var $targ = $(ev.target);
}); 

真的说:当点击.move内匹配document.body的任何元素时调用该函数。

我知道其他人已经说过了,但我想让事件授权更清楚。