Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的jQuery代码不能读取撇号?_Javascript_Jquery_Json_Html Encode_Apostrophe - Fatal编程技术网

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

Javascript 为什么我的jQuery代码不能读取撇号?,javascript,jquery,json,html-encode,apostrophe,Javascript,Jquery,Json,Html Encode,Apostrophe,我有一个web表单,当页面根据存储在MYSQL数据库中的数据加载时,它会自动检查复选框。除了包含撇号的数据外,一切都正常。这是我的密码: JSON: [{"pkFavorietemerken":"1","merken":"Adidas"},{"pkFavorietemerken":"2","merken":"Boss"},{"pkFavorietemerken":"3","merken":"Burberry"},{"pkFavorietemerken":"4","merken":"Christ

我有一个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");


       });

   });
    <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>
HTML:

   $.getJSON("jason.php", function(data) {

      $.each(data, function(){


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


       });

   });
    <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>

  • 阿迪达斯
  • 空军
  • 阿玛尼
  • Asics
  • 比肯伯格
  • 比约恩博格
  • 蓝血
  • 老板
  • 布鲁诺蒂
  • 巴宝莉

这不起作用:

   $.getJSON("jason.php", function(data) {

      $.each(data, function(){


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


       });

   });
    <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>
李维斯
好吧,您可以通过将值用单引号括起来形成一个选择器。嵌入的单引号将导致它成为无效的选择器字符串

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

编辑-尝试以下操作:

$("[value='" + this.merken.replace(/'/g, "\\'") + "']").attr("checked","checked");
此外,如果您使用的是比1.6版本更新的jQuery,您应该(几乎可以肯定)使用
.prop()
而不是
.attr()
来设置“checked”属性:

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

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

对于
Levi's
,生成的选择器最终为
“[value='Levi's']”
。我猜选档器引擎被它卡住了。我不确定它是否支持转义(
Levi's
)——如果不支持,您可以执行以下操作

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

$("[value='" + this.merken + "']").attr("checked","checked");
this.merken=“Levi's”
时,代码将解析为:

$("[value='Levi's']").attr("checked","checked");
不能在单引号内使用单引号。一个简单的修复方法应该是更改代码以创建双引号,只要您没有名为
Levi”s的选择器(
:)


正确的代码应该是:

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

它既接受单引号,也接受双引号。

问题在于撇号,您必须避开它

这里有一个简单的方法

function addslashes( str ) {
    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}
$("[value='" + addslashes(this.merken) + "']").attr("checked","checked");

我已经对它进行了测试,它很管用!我对jQuery有点陌生,所以我想清楚你的代码是做什么的。代码检查所有的输入复选框,看看值是否在列表中,如果在列表中,它会检查复选框是否为真?是的,它会遍历所有的复选框,并将你从JSON获得的值与每个复选框的
值进行比较。I如果它们匹配,则为该复选框设置
checked
属性。我已经测试过了,它也可以工作!哈哈,我想我不会有像
Levi“s
这样的输入值。当使用此方法时,是否有其他特殊字符应该避免使用?为什么在使用1.6及以上版本时,使用
.prop()
而不是
.attr()
很重要?DOM元素的属性之间存在差异(也就是说,您可以通过名称访问的东西,就像DOM元素是JavaScript对象一样;
somthing.name
something.tagName
something.onclick
等)。jQuery人员决定在1.6中明确区分这两个元素,因此在几乎所有情况下,现在您通常都希望使用
.prop()
除非您知道要通过DOM元素的属性API访问某些内容。