我有一个简单的ajax调用返回一些运行良好的json但是我很难在之后用jquery选择元素。这是因为它们加载ajax的方式?
在此阶段,我尝试做的只是警告其中一个数据元素的内容'数据投票'
<div id="list-latest" class="pagelist"></div>
<script>
$(function ()
{
$.ajax({
url: 'http://example.com/go.php',
data: "",
dataType: 'json',
success: function(data)
{
var $grouplist = $('#list-latest');
$.each(data, function() {
$('<div class="tile-item"><a href="javascript:void(0);" onclick="alertme();" class="allinfo" data-votes="' + this.votes + '" data-views="' + this.Views '" >link</a></div>').appendTo($grouplist);
});
}
});
});
<script type='text/javascript'>
function alertme(){
alert($(this).attr("#data-votes"));
}
</script>
是否与我试图选择(这个)的方式有关? 目前它只是返回&#39; undefined&#39;
感谢
答案 0 :(得分:0)
问题是因为this
函数中alertme()
的引用是window
,而不是引发click事件的元素。您需要将引用作为参数传递给函数。另请注意,检索data
属性的语法略有不同。试试这个:
$('<div class="tile-item"><a href="javascript:void(0);" onclick="alertme(this);" class="allinfo" data-votes="' + this.votes + '" data-views="' + this.Views '" >link</a></div>').appendTo($grouplist);
function alertme(el){
alert($(el).data("votes"));
}
应该注意的是,使用Javascript连接事件是更好的做法。在这种情况下,您需要一个委托事件处理程序,因为有问题的元素在加载后会动态地附加到DOM。此方法意味着处理程序中的this
引用将引用引发该事件的元素。试试这个:
$(function() {
$.ajax({
url: 'http://example.com/go.php',
data: "",
dataType: 'json',
success: function(data) {
var $grouplist = $('#list-latest');
$.each(data, function() {
$('<div class="tile-item"><a href="#" class="allinfo" data-votes="' + this.votes + '" data-views="' + this.Views '">link</a></div>').appendTo($grouplist);
});
});
}
$grouplist.on('click', '.allinfo', function(e) {
e.preventDefault();
alert($(this).data("votes"));
});
});