$(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>
请帮帮忙?
答案 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
的任何元素时调用该函数。
我知道其他人已经说过了,但我想让事件授权更清楚。