我有一个表单,我希望已经检查过的值在div中输出到屏幕上。我的代码忽略了“选中”部分,它将在选中复选框时将值输出到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();
});
谢谢
发布于 2014-05-19 10:55:22
一些事情--不确定为什么在.change
中嵌套了一个.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);
}
});
发布于 2014-05-19 10:53:50
问题似乎出现在你的if状态:
if(jQuery("detectChangeCheckbox:checked")){
在这里,您遗漏了一个.
,它是jQuery中的css类选择器表示,您应该检查选中的长度:
if(jQuery(".detectChangeCheckbox:checked").length){
注意:
不需要用click
处理程序包装它,change
事件就可以了。
相反,我建议你这样做:
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());
});
https://stackoverflow.com/questions/23745082
复制