3

我有一个 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"}]

查询:

   $.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>
4

5 回答 5

4

对于Levi's,结果选择器最终是"[value='Levi's']"。我猜选择器引擎会窒息它。我不确定它是否支持转义(Levi\'s)-如果不支持,您可以执行类似的操作

var merken = this.merken;
$("input:checkbox").each(function(){
    if(this.value == merken) this.checked = true;
});

反而。

于 2012-04-09T22:06:01.457 回答
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");
于 2012-04-09T22:06:57.757 回答
1

好吧,您可以通过将您的值用单引号括起来来形成一个选择器。嵌入的单引号将导致它成为无效的选择器字符串。

认为确保嵌入的单引号用反斜杠引用会起作用,但我必须尝试一下。

编辑——试试这个:

$("[value='" + this.merken.replace(/'/g, "\\'") + "']").attr("checked","checked");

此外,如果您使用的是比 1.6 更新的 jQuery ,您应该(几乎可以肯定)使用.prop()而不是设置“checked”属性:.attr()

$("[value='" + this.merken.replace(/'/g, "\\'") + "']").prop("checked", true);

(无需将属性设置为字符串“checked”,但如果您愿意,您也可以这样做,因为浏览器无论如何都会将其转换为布尔值。)

于 2012-04-09T22:04:39.020 回答
0

正确的代码应该是:

$('[value="' + this.merken.replace('"','\"') + '"]').attr("checked","checked");

这接受单引号和双引号。

于 2012-04-09T22:19:40.577 回答
0

问题是撇号,你必须逃避它。

这是一个简单的方法

function addslashes( str ) {
    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}
$("[value='" + addslashes(this.merken) + "']").attr("checked","checked");
于 2012-04-09T22:20:46.610 回答