无法访问动态添加元素的文本

时间:2013-05-29 20:55:29

标签: jquery

我确信这应该有效,所以不知道为什么不这样做。

我将数据从ajax成功回调附加到DOM,然后访问新添加的DOM的部分,但它返回空白而没有错误:

success: function(data) {
    $(data).insertAfter('h1');
},
complete: function(data) {
    var serverlat = $('.pop-lat').text();
    var serverlng = $('.pop-lng').text();

    alert(serverlat + ',' + serverlng); // ' , '
}

通过ajax返回的标记

<div class="pop-lat">55.8613148</div>
<div class="pop-lng">-4.2676099</div>

2 个答案:

答案 0 :(得分:5)

success回调中的完整代码如下所示:

if (data != 0) {
    $('#enquiry-form').fadeOut('fast', function () {
        // animation has completed so append quotation form
        $(data).insertAfter('h1');
    });

} else {
    // spam form submission
    alert('error');
}

您只是在动画完成后附加数据,到那时complete回调已经执行,而您的数据还没有。

您需要将其更改为:

if (data != 0) {
    var $data = $(data)
    $data.insertAfter('h1').hide();

    $('#enquiry-form').fadeOut('fast', function () {
        $data.show();
    });

} else {
    // spam form submission
    alert('error');
}

确保它在DOM中,但只是隐藏它直到动画完成。

答案 1 :(得分:2)

您正在使用 jQuery 1.10.x ,其中成功方法为deprecated

  

弃用通知:jqXHR.success(),jqXHR.error()和   从jQuery 1.8开始,不推荐使用jqXHR.complete()回调函数。准备   你的代码最终删除,使用jqXHR.done(),jqXHR.fail(),   和jqXHR.always()相反。

让我们尝试一下这个:

$.ajax({
    //your code here but without success and complete!!
}).done(function(data) {
    var data = $(data).insertAfter('h1');
    var serverlat = data.find('.pop-lat').text();
    var serverlng = data.find('.pop-lng').text();

    alert(serverlat + ',' + serverlng); // ' , '
})