2011-09-23 77 views
0

我正在使用jQuery和jQuery UI,我试图通过添加jQuery UI按钮在false和true之间切换的“aria-pressed”属性来读取复选框状态。如何在UI更新之前延迟.live()?

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

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

}); 

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

Live example here!

+0

你为什么要通过'aria-pressed'来阅读复选框状态? –

+0

我想获取复选框所在的状态。我不知道任何其他方式:( – Coral

+0

可能想查看[jQuery:checked selector](http://api.jquery.com/checked-selector /) –

回答

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动态添加你要使用实时事件,但它基本上是同样的事情

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

Here's an example有一些额外的脚本和检查,主要是为示范目的。

+0

似乎并不是因为它被AJAX加载的内容所致,但我可以使用live作为更改事件吗? – Coral

+0

它适用于live('changed'....但是我怎么能知道按钮被点击后的状态? – Coral

+0

要检查它有哪个状态,可以使用'$(this).attr(“checked”)',它可以返回'undefined'或'checked'。 – ShadowScripter

0

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

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

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

我如果您使用.toggle()或没有,但你需要使用一个回调两种方式,以确保顺序执行不太清楚。

+0

我是通过AJAX调用动态添加所有按钮,所以它似乎不起作用。这就是为什么我首先使用live()(至少我认为我必须使用live())。使用切换作为live()事件? – Coral

相关问题