我正在使用jQuery插件radiosToSlider(http://rubentd.com/radios-to-slider/)并且需要确保检查所有单选按钮组并在它们出现时发出警报
我可以这样做,如果他们只是通过检查长度的单选按钮,但因为插件更改输入按钮我有困难
我的小提琴是 http://jsfiddle.net/yFaAj/270/
$(document).ready(function () {
$(".radios").radiosToSlider();
});
$(":radio").change(function () {
var names = {};
$(':radio').each(function () {
names[$(this).attr('name')] = true;
});
var count = 0;
$.each(names, function () {
count++;
});
if ($(':radio:checked').length === count) {
alert("all answered");
}
}).change();
感谢
答案 0 :(得分:0)
问题不在于插件会改变你的结构(尽管它确实添加了一些我不同意的ins
个元素),而是插件不会触发change
已转换的无线电控件的事件,并以交互方式设置checked
属性似乎也不这样做。
由于插件作者没有为此用例发布API,因此很难知道这是设计还是疏忽,但是当单击滑块时源代码肯定不会触发事件:
this.bearer.find('.slider-level').click( function(){
var radioId = $(this).attr('data-radio');
slider.bearer.find('#' + radioId).prop('checked', true);
slider.setSlider();
});
你的选择,正如我看到的那样:
click
类的.slider-level
事件,就像API一样。
click
事件,并捕捉到气泡上的点击事件
以下是选项3的示例实现。 DEMO 。
$(document).ready(function () {
$(".radios").radiosToSlider();
});
var makeIsRadioGroupChecked = function(selector) {
var $radioGroup = $(selector);
return function isRadioGroupChecked() {
return $radioGroup.find(':checked').length > 0;
};
};
var isOptionsChecked = makeIsRadioGroupChecked('#optionsRadioGroup');
var isSizeChecked = makeIsRadioGroupChecked('#sizeRadioGroup');
var areAllGroupsChecked = function() {
return isOptionsChecked() && isSizeChecked();
};
var alertIfAllGroupsChecked = function() {
if (areAllGroupsChecked()) {
alert("all answered");
}
};
$('.radios').on('click', alertIfAllGroupsChecked);