2011-06-14 49 views
1

this JSfiddle有我一个复选框,一个标签和一个提交按钮。想添加元素。怎么了?

当复选框被选中,并且点击提交时,会出现一个'x',就像现在所做的那样。

当复选框未选中,并单击提交时,'x'应该消失,就像现在所做的那样。

问题是,'x'不再出现,如果复选框被选中,并且点击提交。

这是我的代码

$('form').submit(function() { 
    if($("input[type=checkbox]").is(':checked')){ 
     $("label").add(); 
    }else{ 
     $("label").detach(); 
    }   
    return false; 
}); 


<form action="" method="post"> 
<input id="element" signed" type="checkbox" checked> 
<label for="element">x</label> 
<button type="submit">Submit</button> 
</form> 

任何想法有什么不对?

+2

'<输入的ID =“元件”签字”类型=‘复选框’选中>'包含引号失配。 – 2011-06-14 12:39:06

+0

你可以给它的标签和节目上的ID /隐藏它基于这个?和汤姆说你的语法错误导致probs太 – Andrew 2011-06-14 12:39:55

回答

2

那么,如果你使用show()hide()而不是add()detach(),它的工作原理。

但我不确定如果这种方法解决你想要实现的。

1

当您标注detach时,它不再位于DOM中,因此$('label')不再有效。您将不得不将节点存储在某个位置,而不在DOM中。

另外add不是将节点添加到DOM中的正确函数。

var $label = $("label"); 
$('form').submit(function() { 
    if($("input[type=checkbox]").is(':checked')){ 
     $("input[type=checkbox]").after($label); 
    } 
    else { 
     $label.detach(); 
    }   
    return false; 
}); 

Here's a live example.

1

x不会再次出现,因为你没有添加分离元素,你是试图添加新的元素没有文本。

$("label").add(); 

查看正确使用add

此外,您正在分离并且不保存引用以将其重新附加回去。见an example of detach on jQuery docs

1

取下标签后DOM的不再是一部分,这样你就可以使用$('label')不再选择它,也add()没有做什么,你想这样做,你可能会寻找after()

Working fiddle:

xLabel = $("label"); 
$('form').submit(function() { 
    if($("input[type=checkbox]").is(':checked')){ 
     $("#element").after(xLabel); 
    }else{ 
     $("label").detach(); 
    }   
    return false; 
}); 
+0

我怀疑她正在寻找'append'。 – 2011-06-14 12:46:34

+0

她可能不是在找它,但它在这种情况下工作... – 2011-06-14 13:15:28

+0

@Kirstoffer:不是真的,因为证明你的例子使用'after'后的事实:) – 2011-06-14 15:15:11