3

MYSQLデータベースに保存されているデータに基づいてページが読み込まれるときにチェックボックスを自動的にチェックするWebフォームがあります。アポストロフィを含むデータを除いて、すべてが正常に機能します。これが私のコードです:

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>
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を使用している場合は、(ほぼ確実に)「checked」プロパティを設定する.prop()代わりにを使用する必要があります。.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 に答える