2016-07-26 19 views
0

Der Codeschnipsel: Betrachten Sie den Code-Schnipsel (https://jsfiddle.net/Zikaynam/sgha2fkg):Radiobutton Gruppe Initialisierungsfehler

<?php 
    $gender = ""; 
?> 

<label>Gender<span>*</span></label> 

<div> 
    <div id="gender" data-toggle="buttons radio"> 

     <label> 
      <input type="radio" name="gender" value="M" checked=<?php ($gender=="M") ? 'checked' : '' ?>/>&nbsp; Male &nbsp; 
     </label> 

     <label> 
      <input type="radio" name="gender" value="F" checked=<?php ($gender=="F") ? 'checked' : '' ?>/> Female 
     </label> 

     <label> 
      <input type="radio" name="gender" value="L" checked=<?php ($gender=="L") ? 'checked' : '' ?>/> LGBT 
     </label> 
    </div> 
</div> 

Die Intention: Die Absicht des Code-Snippets ist eine globale Variable zu initialisieren und die genannte verwenden globale Variable, um zu bestimmen, welcher Radiobutton anfänglich "überprüft" wird oder ob alle Radioknöpfe anfänglich "nicht markiert" sind.

Der Ausfall: Wie es in der gegebenen Verbindung I die globale Variable initialisiert gezeigt wird „beabsichtigen gesetzt, um zunächst den Radio-Buttons als“ mit „nicht markiert“, aber es stellt sich heraus, dass einer der Radio-Buttons war „geprüft“ . Ich bin neu in der Webentwicklung, so dass ich etwas übersehen oder etwas vermasselt habe. Kann mir also jemand zeigen, was mit meinem Code-Snippet nicht stimmt und warum hat es sich nicht so verhalten, wie ich es mir vorgestellt habe? Danke für den Ratschlag.

+0

Sie setzen eine Variable auf eine leere Zeichenfolge - und dann tun Sie ein paar Tests, um zu sehen, ob es einen von mehreren Werten hat sind keine leere Zeichenkette ... wie soll das irgendeinen Sinn machen? – CBroe

+0

dann, wie kommt es, selbst wenn ich $ Geschlecht als "M" initialisiert hat es immer noch nicht funktioniert? sollte die leere Zeichenkette nicht ein Faktor sein, da ich den Wert teste und wenn der Test fehlschlug, sollte die Schaltfläche nicht deaktiviert sein? – Zikaynam

+0

Das ist, weil 'checked 'ein [boolesches Attribut] ist (http://www.w3.org/TR/html5/infrastructure.html#boolean-attribute) - seine bloße Anwesenheit bedeutet, dass es als gesetzt betrachtet wird, egal was Wert ist. Sie müssen nicht 'checked =' drin für Radio-Buttons, die an erster Stelle deaktiviert werden sollen. – CBroe

Antwort

0

Sie nie echo etwas nach dem Wert von $gender Prüfung, so dass der Quellcode Ihrer Webseite immer enthalten (was auch immer der Wert $gender ist):

<input type="radio" name="gender" value="M" checked=/> 

<input type="radio" name="gender" value="F" checked=/> 

<input type="radio" name="gender" value="L" checked=/> 

Sie können sehen, dass der HTML-Code ist ungültig: entweder das = Zeichen sollte nicht da sein, oder es sollte checked="checked" sein.
Ihr Webbrowser ist sehr freundlich und zeigt sein Bestes, um Webseiten anzuzeigen, die Fehler enthalten. In diesem Fall wird das Zeichen = wahrscheinlich ignoriert und alle Optionsfelder werden überprüft. Da jedoch nur ein Optionsfeld in einer Gruppe überprüft werden kann, wird eines davon als geprüft angezeigt.

Hinweis: Wenn Sie eine Webseite mit einer serverseitigen Sprache wie PHP erstellen, wenn Sie nicht das bekommen, was Sie erwarten, und Sie nicht verstehen, was falsch ist, sollten Sie den Quellcode in Ihrem Browser überprüfen. Es hilft oft zu erkennen, wo das Problem liegt.

Festgelegte Version:

<input type="radio" name="gender" value="M" <?php echo ($gender=="M") ? 'checked' : '' ?> 
<input type="radio" name="gender" value="F" <?php echo ($gender=="F") ? 'checked' : '' ?> 
<input type="radio" name="gender" value="L" <?php echo ($gender=="L") ? 'checked' : '' ?> 

Siehe https://eval.in/613115 für den gesamten Code.

+0

hmmm Wenn Sie meinen, dass $ Gender nicht als leer initialisiert werden sollte, warum hat es dann nicht funktioniert, selbst wenn ich $ gender als "M" initialisiert habe? – Zikaynam

+0

@ Zikaynam Ich aktualisierte meine Antwort. – Jocelyn

0

Ich ziehe meine Frage zurück ... fand endlich das Problem ... Danke, dass Sie so nett waren, meine Frage zu verwerfen, ohne auch nur zu erklären, was das Problem war und wie ich es lösen kann ... zumindest sind Sie gegangen Ich 1 Punkt, der wirklich ein Booster für einen Neuling bei Web-Entwicklung ist .. danke trotzdem

+0

Ich verstehe die Abstimmung nicht ganz, bevor sie etwas mitteilen. –