如何延迟.live()直到UI更新?

时间:2011-09-23 14:10:39

标签: javascript jquery jquery-ui jquery-ui-button

我正在使用jQuery和jQuery UI,我试图通过添加“aria-pressed”属性来读取复选框状态,jQuery UI Button在false和true之间切换。

$('.slideButton').live('click', function() {

alert($(this).attr('aria-pressed'));

});

然而,这个代码似乎在jQuery UI更新了aria-pressed之前读取了aria-pressed。所以我的价值不可靠。我可以安排它在UI更新后执行,还是可以让它等待?

Live example here!

2 个答案:

答案 0 :(得分:1)

你不能在标签或跨度后面的实际复选框中添加一个监听器吗?

$("#days_list li div div div input[type='checkbox']").change(function(){
     alert("Someone just clicked checkbox with id"+$(this).attr("id"));
});

这应该有效,因为一旦您点击标签,您就会更改复选框中的值。


好吧,我为你编写了一个live example,它展示了它如何工作的一般概念,以及你如何检索复选框的状态。

$("#checkbox_container input").change(function(){
    if($(this).is(":checked")) alert("Checked!");
    else alert("Unchecked!");
});

在你的情况下,由于复选框是由JQuery动态添加的,你必须使用live事件,但它基本上是一样的

$("#checkbox_container input").live("changed"....

Here's an example进行了一些额外的脚本和检查,主要用于演示目的。

答案 1 :(得分:0)

切换完成后,您可以使用回调来执行alert($(this).attr('aria-pressed'));

$('.slidebutton').toggle(1000, function(){

    alert($(this).attr('aria-pressed'));
});

我不太确定你是否使用.toggle(),但是你需要使用回调来确保顺序执行。