首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的jQuery代码不能读取撇号?

为什么我的jQuery代码不能读取撇号?
EN

Stack Overflow用户
提问于 2012-04-09 22:02:09
回答 5查看 3.1K关注 0票数 3

我有一个web表单,当页面根据存储在MYSQL数据库中的数据加载时,它会自动检查复选框。除了包含撇号的数据外,一切都运行得很好。这是我的密码:

JSON:

代码语言:javascript
复制
 [{"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:

代码语言:javascript
复制
   $.getJSON("jason.php", function(data) {

      $.each(data, function(){


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


       });

   });

HTML:

代码语言:javascript
复制
    <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>

--这不起作用:

代码语言:javascript
复制
    <li><input type="checkbox" name="merk[]" value="Levi's"/>Levi's</li>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-09 22:06:01

对于Levi's,最终得到的选择器是"[value='Levi's']"。我猜选择器引擎会堵在上面。我不确定它是否支持转义(Levi\'s) --如果它不支持,您可以这样做

代码语言:javascript
复制
var merken = this.merken;
$("input:checkbox").each(function(){
    if(this.value == merken) this.checked = true;
});

而不是。

票数 4
EN

Stack Overflow用户

发布于 2012-04-09 22:06:57

代码语言:javascript
复制
$("[value='" + this.merken + "']").attr("checked","checked");

this.merken = "Levi's"时,代码将解析为:

代码语言:javascript
复制
$("[value='Levi's']").attr("checked","checked");

单引号中不能使用单引号。一个简单的解决方法应该是更改代码以创建双引号,只要您没有一个名为Levi"s的选择器:)

代码语言:javascript
复制
$('[value="' + this.merken + '"]').attr("checked","checked");
票数 3
EN

Stack Overflow用户

发布于 2012-04-09 22:04:39

你用单引号包装你的值,形成一个选择器。嵌入的单引号将导致它成为无效的选择器字符串。

我认为它可以确保嵌入单引号被反斜杠引用,但我必须尝试一下。

编辑-尝试如下:

代码语言:javascript
复制
$("[value='" + this.merken.replace(/'/g, "\\'") + "']").attr("checked","checked");

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

代码语言:javascript
复制
$("[value='" + this.merken.replace(/'/g, "\\'") + "']").prop("checked", true);

(不需要将该属性设置为字符串"checked",但如果您愿意的话,您可以这样做,因为浏览器只是将其转换为布尔值。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10080449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档