jQuery等到元素属性有值

时间:2014-12-09 01:55:03

标签: jquery wait

我有一个元素

<span id="current" data=""></span>

data属性的值将由异步AJAX函数填充。我无法将此功能更改为同步或使其返回值。

这是代码的一部分

$("#popup #save").click(function () {

    //setting a lot of vars here

    var id = $("#current").val();

    if (id == '') {
        //new  so insert

        $.ajax({
            type: "GET",
            url: myurl,
            data: "",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                $("#loadstatus").html('');
                //returns new id
                if (data > 0) {
                    $('#current').val(data);
                }
            }
        });
    }
    else {
        //existing  so update
        //more code
    }

    return false;

});



    var id = $("#current").val();
    if (id == '') {
        //save  
        $("#popup #save").click(); //this function contains the AJAX call which also sets `$("#current").val()` with a value returned in that same AJAX call

        //I can only set the value of id after the success of the aforementioned AJAX function
        //so here I need to set some sort of timeout
        id = $("#current").val();
    }

我想执行另一个函数,但在该函数中我想等到属性data不等于空。 我正在检查这个:http://javascriptisawesome.blogspot.com/2011/07/faster-than-jquerydocumentready-wait.html 但我更喜欢使用默认的jQuery。

我该怎么办?

3 个答案:

答案 0 :(得分:4)

您可以轮询数据的值:

function check() {
    if (!$('#current').attr('data')) {
        return setTimeout(check, 1000);
    }

    // do work here
}

check();

答案 1 :(得分:0)

如果您能够将<span>更改为<input>,您将能够使用jQuery的.change()活动,这将使您的生活更轻松。

<input id="current" value="" type="hidden" />

JS

$('#current').change(function(e){
    myFunction();
});

答案 2 :(得分:0)

您可以使用超时定期检查该值是否不再为空。

http://jsfiddle.net/Delorian/1g932hj8/

注1:我将你的跨度改为了一个输入法,允许你在JS小提琴中更新它,但如果它是一个跨度,代码将正常工作。

注2:这是一个递归函数,它调用自己在睡眠2秒后重新检查该值。如果您正在实施此操作,则应该在特定情况下满足永久运行和清理或停止呼叫的需要。

var doSomethingOnceValueIsPresent = function () {
    if ($('#current').val() != '')
    {
        alert('something!');
    }
    else
    {
        setTimeout(function(){
            doSomethingOnceValueIsPresent()
            }, 2000);
    }
};

doSomethingOnceValueIsPresent();