我有一个表单,我希望已检查的值在div中输出到屏幕。我的代码忽略了:checked部分,当复选框被选中时,它会将值输出到div但是在取消选中时它不会删除它。
此外,它不会将它们添加到列表中,而是用旧的替换最后一次单击的复选框值...
这是我的代码:
jQuery('.detectChangeCheckbox').click(function(){
jQuery(".detectChangeCheckbox").change(function () {
var stepId = jQuery(this).attr("rel");
var str = "You have selected: ";
if(jQuery("detectChangeCheckbox:checked")){
jQuery(this).each(function () {
str += jQuery(this).val() + " ";
});
};
jQuery("#liveResult"+stepId).text(str);
})
.change();
});
由于
答案 0 :(得分:0)
问题似乎出现在你的if条件中:
if(jQuery("detectChangeCheckbox:checked")){
这里你错过了.
这是jQuery中的css类选择器表示,你应该检查检查的长度:
if(jQuery(".detectChangeCheckbox:checked").length){
您不需要使用click
处理程序包装它,change
事件就可以。{/ p>
相反,我建议你这样做:
jQuery(".detectChangeCheckbox").change(function () {
var stepId = jQuery(this).attr("rel");
var idx = $(this).index();
var arr = [];
($(this).is(':checked')) ? arr.push(this.value) : arr.splice(1, idx);
jQuery("#liveResult"+stepId).text(arr.join());
});
答案 1 :(得分:0)
偶然 - 不确定为什么click
嵌套在.change
中 - 除非您不希望在点击之后绑定change
事件,否则不要这样做。我只能猜测这是你想要的代码:
jQuery(".detectChangeCheckbox").change(function () {
var stepID = jQuery(this).attr("rel");
if (this.checked) {
var checkedValues = jQuery(".detectChangeCheckbox:checked").map(function() {
return this.value;
}).get().join(" ");
jQuery("#liveResult"+stepID).text(checkedValues);
}
});