2012-01-09 40 views
2

我用一个简单的道具呼叫改变jqueryui“切换”按钮(又名checkbox)的状态,使用这样的: $("#completed_button").prop("checked", true);jQueryUI的按钮状态上托呼不改变

功能的复选框改变状态和脚本运行正常。不幸的是,它并没有改变按钮的视觉状态。任何想法为什么不这样做,我能做些什么来实现它?

示例:中间下方是使用鼠标切换时的样子,右侧是使用上述呼叫时发生的情况。注意文本是如何正确的,但视觉亮点不是。

enter image description here

+0

多一点的代码将是有益的。 – j08691 2012-01-10 00:08:22

回答

11

的问题是,按钮的jQuery的UI元素从切换按钮监听变化事件,但是当你说.prop('checked', true)的变化不会触发事件。此行为一直回到DOM Level 2 Event Model

更改事件发生在控件失去输入焦点并且自获得焦点后修改其值时。此事件对INPUT,SELECT和TEXTAREA有效。元件。

调用.prop('checked', true)(甚至.attr('checked', 'checked'))并不这么没有变化事件发生改变的焦点。

解决的办法是自己触发这种改变事件:

$("#completed_button").prop("checked", true).change(); 

这应该让jQuery的UI包装知道复选框已经改变状态,然后jQuery的UI视觉也将发生变化。

下面是一个简单的演示,说明这是怎么回事:http://jsfiddle.net/ambiguous/8et3G/

+0

令人惊叹的回复!谢谢。 我喜欢这是一个简单的解决方法,并且您为了解它发生的原因而给出了背景故事。难怪你有61.7k代表。 – Brian 2012-01-10 17:35:59