Warum ist mein jQuery-Code nicht in der Lage einen Apostroph zu lesen?

stimmen
2

Ich habe ein Web-Formular, das das Kontrollkästchen automatisch überprüft, wenn die Seite geladen wird, basierend auf den in der MYSQL-Datenbank gespeicherten Daten. Alles funktioniert gut, mit Ausnahme der Daten, die einen Apostroph enthält. Hier ist mein Code:

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>

Dies nicht funktioniert:

    <li><input type=checkbox name=merk[] value=Levi's/>Levi's</li>
Veröffentlicht am 09/04/2012 um 21:02
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
1

Nun, Sie bilden einen Selektor durch Ihren Wert in einfache Anführungszeichen wickeln. Das eingebettete Apostroph wird dazu führen, dass ein ungültiger Selektor-String sein.

Ich denke , es wird sicher eingebettetes einfaches Anführungszeichen machen arbeitet , wird mit einem Backslash zitiert, aber ich werde es versuchen.

bearbeiten - versuchen Sie dies:

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

Seien Sie auch, sollten Sie (fast sicher) unter Verwendung .prop()statt .attr()die „geprüft“ Eigenschaft festlegen , wenn Sie einen neuen über 1.6 jQuery verwenden:

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

(Keine Notwendigkeit, das Eigentum an den String „geprüft“ setzen, wenn Sie können, wenn Sie mögen, weil der Browser es einfach mal so boolean geworfen wird.)

Beantwortet am 09/04/2012 um 21:04
quelle vom benutzer

stimmen
3

Für Levi'senden die resultierenden Wähler oben sind "[value='Levi's']". Ich denke , der Selektor - Engine auf sie Drosseln. Ich bin mir nicht sicher , ob es (unterstützt Flucht Levi\'s) - wenn dies nicht der Fall, können Sie wie etwas tun

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

stattdessen.

Beantwortet am 09/04/2012 um 21:06
quelle vom benutzer

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

Wenn this.merken = "Levi's", wird der Code auf dieses Problem zu beheben:

$("[value='Levi's']").attr("checked","checked");

Sie können nicht ein einziges Zitat in einfache Anführungszeichen verwenden. Eine einfache Lösung soll Ihren Code zu ändern sein , um doppelte Anführungszeichen zu erstellen, solange Sie nicht einen Selektor genannt haben Levi"s:)

$('[value="' + this.merken + '"]').attr("checked","checked");
Beantwortet am 09/04/2012 um 21:06
quelle vom benutzer

stimmen
0

Das rechte Stück Code sollte sein:

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

Diese übernimmt einfache Anführungszeichen sowie doppelte Anführungszeichen.

Beantwortet am 09/04/2012 um 21:19
quelle vom benutzer

stimmen
0

Das Problem ist der Apostroph, haben Sie es zu entkommen.

Hier ist eine einfach Art und Weise, dies zu tun

function addslashes( str ) {
    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}
$("[value='" + addslashes(this.merken) + "']").attr("checked","checked");
Beantwortet am 09/04/2012 um 21:20
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more