Überprüfen Sie, ob die Eingabe der Radio-ID ausgewählt ist, bevor das Formular gesendet wird
Lesezeit: 4 Minuten
Zach Smith
Ich arbeite mit WooCommerce auf WordPress. In der Kasse möchte ich prüfen, ob ein bestimmtes Optionsfeld ausgewählt ist, bevor der Benutzer absendet. Wenn eine bestimmte ID ausgewählt ist, führen Sie a aus window.alert zur Zeit. Ich habe das folgende Formular, das von WooCommerce bereitgestellt wird:
<script type="text/javascript">
if (document.getElementById('shipping_method_0_distance_rate_shipping').checked) {
alert("Delivery checked!");
}
</script>
Das Skript funktioniert hervorragend, wenn die Seite geladen wird, aber wenn ich das Optionsfeld deaktiviere und erneut auswähle, bevor die Seite gesendet wird, funktioniert das Skript nicht. Wenn ich in Echtzeit sehen kann, welche sie auswählen, würde das mein unmittelbares Problem lösen.
Ich schätze Ihre Zeit und Hilfe dabei.
mplungjan
So benachrichtigen Sie, wenn darauf geklickt wird:
window.onload = function () { // when page loads
// To alert when clicking
document.getElementById('shipping_method_0_distance_rate_shipping').onclick=function() {
alert("Delivery checked!");
}
// To test when submitting:
document.getElementById('yourFormId').onsubmit=function() {
if (!document.getElementById('shipping_method_0_distance_rate_shipping').checked) {
alert("Delivery not checked!");
return false; // cancel submit
}
}
}
So fragen Sie, ob sie auf die richtige Option geklickt haben:
window.onload = function () { // when page loads
document.getElementById('yourFormId').onsubmit=function() {
return confirm(document.getElementById('shipping_method_0_distance_rate_shipping').checked ?
"Local Pickup?" :
"Delivery from 536 S College Ave, Chicago, IL?");
}
}
das funktioniert einwandfrei. vielen dank für deine zeit und erfahrung.
– Zach Smith
19. Januar 17 um 7:47 Uhr
scheint, wenn ich teste, wenn ich das Optionsfeld deaktiviere und dann erneut auswähle, wird das Skript nicht ausgelöst. die Gedanken?
– Zach Smith
19. Januar 17 um 7:52 Uhr
Wenn Sie beim Klicken warnen möchten, benötigen Sie BEIDE Skripte – siehe Update
– mplungjan
19. Januar 17 um 7:54 Uhr
Ich möchte nicht auf der Seite senden testen. Ich möchte nur testen, ob der Benutzer die Radio-ID vor dem Senden auswählt. Das Konzept hier ist, dass ich den Benutzer warnen muss, wenn er eine bestimmte Versandoption auswählt, bevor er sie absendet, um Probleme zu reduzieren, dass Benutzer die falsche Versandmethode auswählen, die sich auf bestimmte Kriterien bezieht, die nichts mit diesem Thema zu tun haben.
– Zach Smith
19. Januar 17 um 7:55 Uhr
Ich habe eine Frage. Ich habe diesen Code in die Produktion verschoben und verwende dieses Skript jetzt in einem anderen Projekt für eine andere Lösung. sehr praktisch. neugierig, wie ich eine if/else-Situation erstellen kann (ich bin PHP-Entwickler, also nicht zu sehr an js gewöhnt), in der eine Tab-ID standardmäßig verwendet wird. Nehmen wir an, wenn die Seite geladen wird und keine Registerkarten-ID ausgewählt ist, wie könnte ich dies auslösen? Wenn dies keinen Sinn macht, kann ich eine neue Frage mit dem betreffenden Code schreiben.
– Zach Smith
19. Januar 17 um 11:10 Uhr
Ihr Javascript wird nur einmal ausgeführt. Sie müssen den Wert des aktivierten Radios jedes Mal überprüfen, wenn Sie ein Optionsfeld aktivieren (naja, das ist ein seltsamer Ausdruck).
Siehe die Antwort von @Afnan Ahmad für ein funktionierendes Beispiel.
Dies ist ein Kommentar, keine Antwort, und es reicht aus, das Senden zu überprüfen
– mplungjan
19. Januar 17 um 7:47 Uhr
Ich dachte darüber nach, Code hinzuzufügen, aber dann war jemand schneller. Und dies ist eine mögliche Lösung, obwohl dies kein Code ist.
– elementnull23
19. Januar 17 um 7:49 Uhr
Afnan Ahmad
Rufen Sie diese Funktion vor dem Absenden auf. Wenn Sie die Formularübermittlung stoppen möchten, fügen Sie Ihr Formular hinzu onsubmit
function validate() {
if (document.getElementById('shipping_method_0_distance_rate_shipping').checked) {
alert("checked submit form");
return true;
} else {
alert("Unchecked form will not be submitted");
return false;
}
}
Jetzt funktioniert es genauso wie meine Antwort, aber weniger elegant (gleichmäßige Inline-Behandlung)
– mplungjan
19. Januar 17 um 7:52 Uhr
Da dieses Formular von WooCommerce stammt, kann ich das Formular nicht bearbeiten und den Onclick-Handler hinzufügen. Deshalb bin ich gezwungen, über die CSS-ID zu zielen
– Zach Smith
19. Januar 17 um 7:52 Uhr
Ein noch besserer Grund, keine Inline-Handler zu verwenden
– mplungjan
19. Januar 17 um 7:53 Uhr
Sie können Ihren Radiobuttons eine Klasse zuweisen und anhand dessen den angeklickten Wert erhalten.