我有一个Web表单,根据存储在MYSQL数据库中的数据,在页面加载时自动检查复选框。除了包含撇号的数据外,一切正常。这是我的代码:
JSON:
[{"pkFavorietemerken":"1","merken":"Adidas"},{"pkFavorietemerken":"2","merken":"Boss"},{"pkFavorietemerken":"3","merken":"Burberry"},{"pkFavorietemerken":"4","merken":"Christian Dior"},{"pkFavorietemerken":"5","merken":"D&G"},{"pkFavorietemerken":"6","merken":"Diesel"},{"pkFavorietemerken":"7","merken":"Dolce & Gabanna"},{"pkFavorietemerken":"8","merken":"Emporio Armani"}]
JQUERY:
$.getJSON("jason.php", function(data) {
$.each(data, function(){
$("[value='" + this.merken + "']").attr("checked","checked");
});
});
HTML:
<form name="form1" method="post" action="something.php">
<ul>
<li><input type="checkbox" name="merk[]" value="Adidas"/>Adidas</li>
<li><input type="checkbox" name="merk[]" value="Airforce"/>Airforce</li>
<li><input type="checkbox" name="merk[]" value="Armani"/>Armani</li>
<li><input type="checkbox" name="merk[]" value="Asics"/>Asics</li>
<li><input type="checkbox" name="merk[]" value="Bikkemberg"/>Bikkemberg</li>
<li><input type="checkbox" name="merk[]" value="Bjorn Borg"/>Bjorn Borg</li>
<li><input type="checkbox" name="merk[]" value="BlueBlood"/>BlueBlood</li>
<li><input type="checkbox" name="merk[]" value="Boss"/>Boss</li>
<li><input type="checkbox" name="merk[]" value="Brunotti"/>Brunotti</li>
<li><input type="checkbox" name="merk[]" value="Burberry"/>Burberry</li>
</ul>
这不起作用:
<li><input type="checkbox" name="merk[]" value="Levi's"/>Levi's</li>
答案 0 :(得分:3)
对于Levi's
,结果选择器最终为"[value='Levi's']"
。我猜选择器引擎会扼杀它。我不确定它是否支持转义(Levi\'s
) - 如果不支持,你可以做类似的事情
var merken = this.merken;
$("input:checkbox").each(function(){
if(this.value == merken) this.checked = true;
});
代替。
答案 1 :(得分:3)
$("[value='" + this.merken + "']").attr("checked","checked");
当this.merken = "Levi's"
时,代码将解析为:
$("[value='Levi's']").attr("checked","checked");
您不能在单引号内使用单引号。一个简单的解决方法应该是更改代码以创建双引号,只要您没有名为Levi"s
的选择器:)
$('[value="' + this.merken + '"]').attr("checked","checked");
答案 2 :(得分:1)
通过将值包装在单引号中,您可以形成一个选择器。嵌入的单引号将使它成为无效的选择器字符串。
我认为它可以确保嵌入的单引号用反斜杠引用,但我必须尝试。
编辑 - 试试这个:
$("[value='" + this.merken.replace(/'/g, "\\'") + "']").attr("checked","checked");
此外,如果你使用的是比1.6更新的jQuery,你应该(几乎可以肯定)使用.prop()
代替.attr()
来设置“checked”属性:
$("[value='" + this.merken.replace(/'/g, "\\'") + "']").prop("checked", true);
(无需将属性设置为“已检查”字符串,但如果您愿意,可以使用,因为浏览器无论如何都会将其强制转换为布尔值。)
答案 3 :(得分:0)
正确的代码应该是:
$('[value="' + this.merken.replace('"','\"') + '"]').attr("checked","checked");
这接受单引号和双引号。
答案 4 :(得分:0)
问题在于撇号,你必须逃脱它。
这是一种简单的方法
function addslashes( str ) {
return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}
$("[value='" + addslashes(this.merken) + "']").attr("checked","checked");