#javascript #html #jquery
#javascript #HTML #jquery
Вопрос:
У меня есть 4 флажка в моей форме контактов. Они реализовали функциональность переключателей, поэтому, когда вы нажимаете на другой флажок, первый флажок снимается.
Моя проблема в том, что когда вы нажимаете на флажок 1, он отображает правильный текст. Но когда вы нажимаете на флажок номер 2 или 3 или 4, текст должен исчезнуть, а этого не происходит.
Возможно, мне нужно подключить мои JS-коды к одной функции, но я новичок в JS, поэтому, возможно, вы могли бы помочь мне с этим.
Код здесь
JS
function checkOnlyOne(b){
var x = document.getElementsByClassName('daychecks');
var i;
for (i = 0; i < x.length; i ) {
if(x[i].value != b) x[i].checked = false;
}
$(function () {
var submityesClicked;
//catch the click to buttons
$('#submityes').click(function () {
submityesClicked = true;
});
$('#submitno').click(function () {
submityesClicked = false;
});
$('#webform').submit(function (e) {
e.preventDefault();//prevent the default action
$.ajax({
type: "POST",
/*url: "process.php", //process to mail
data: $('form.contact').serialize(),*/
success: function (msg) {
window.location.replace(submityesClicked ? "/submit_resolved_yes.php" : "/submit_resolved_no.php");
},
error: function () {
alert("error");
}
});
});
});
function myFunction() {
var checkBox = document.getElementById("document1");
var text = document.getElementById("text");
if (checkBox.checked == true){
text.style.display = "block";
} else {
text.style.display = "none";
document.getElementById("myFunction").checked = false;
}
}
HTML-код
<form name="cf2" id="formularos" method="post" action="test.php">
<div class="checkbox-group required">
<p class="center">Vyberte školenie</p>
<label class="container riadok"><p for="document1" class="dolava">§20 Poučená osoba</p>
<input type="checkbox" class="daychecks" name="document[]" value="20" id="document1" onclick="checkOnlyOne(this.value); myFunction()" />
<span class="checkmark"></span>
</label>
<label class="container riadok"><p for="document" class="dolava">Aktualizácia: §21 AŽ §24</p>
<input type="checkbox" class="daychecks" name="document[]" value="21-24" id="document2" onclick="checkOnlyOne(this.value);" >
<span class="checkmark"></span>
</label>
<label class="container riadok"><p for="document" class="dolava">§21 AŽ §23 pre EZ</p>
<input type="checkbox" class="daychecks" name="document[]" value="21-23" id="document3" onclick="checkOnlyOne(this.value);" >
<span class="checkmark"></span>
</label>
<label class="container riadok"><p for="document" class="dolava">§24 Revízny technik</p>
<input type="checkbox" class="daychecks" name="document[]" value="24" id="document4" onclick="checkOnlyOne(this.value);" >
<span class="checkmark"></span>
</label>
<p id="text" style="display:none">ZÁVÄZNÁ PRIHLÁŠKA <br>Na "Kurz o POUČENEJ OSOBE" <br>pre držiteľov platných „Osvedčení“ podľa vyhl. MPSVaR SR č. 508/09 Z. z , § 20, podľa § 16 odst. 4 a 7 zákona č. 124/2006 Z. z., o BOZP a zmene a doplnení niektorých zákonov v znení neskorších predpisov , ktorými sa dopĺňa zákon č. 355/2007 Z. z., o podpore verejného zdravia, najmä zák. č. 470/2011 Z. z. s vyznačením účasti na origináli „ Osvedčenia“.</p>
</div>
<p class="center">Vyplňte osobné údaje</p>
<input type="text" name="name" id="name" class="form-control" placeholder="Meno" required="required">
<input type="text" name="email" id="email" class="form-control" placeholder="Email" required="required">
<input type="tel" name="phone" id="phone" class="form-control" placeholder="Telefónne číslo" pattern="[0-9] " title="Zadajte iba čísla." required="required">
<input type="hidden" name="send" value="1" />
<button type="submit" value="SEND" id="submit" class="btn btn-primary"> ODOSLAŤ PRIHLÁŠKU</button>
</form>
URL страницы находится здесь
ДЕМОНСТРАЦИОННЫЙ URL
Ответ №1:
В вашем code
требуется несколько улучшений, которые я сделал, и теперь они работают так, как ожидалось.
Вам нужно вызвать myFunction
текстовое отображение для каждого checkbox
— в этой функции вы можете просто this
ссылаться на элемент, на который нажали, и в функции просто проверить, является ли ввод checked
и id
элемента document1
таким образом, вам не нужно писать код для каждого ввода или нескольких текстов, которые у вас есть.
Кроме того, вам не нужно проверять условие if, добавляя true
к нему, поскольку if (e.checked)
это означает, что это будет truthy
— (true), если вам не нужно ничего определять, а также вам не нужно также проверять значение false . Поскольку, как только флажки изменятся, это будет unchecked
по default
Редактировать: Поскольку вы хотели отображать different
текст на разных checkbox
экранах, проверено. Я также добавил эту функциональность.
Живая рабочая демонстрация:
function checkOnlyOne(b) {
var x = document.getElementsByClassName('daychecks');
var i;
for (i = 0; i < x.length; i ) {
if (x[i].value != b) x[i].checked = false;
}
}
$(function() {
var submityesClicked;
//catch the click to buttons
$('#submityes').click(function() {
submityesClicked = true;
});
$('#submitno').click(function() {
submityesClicked = false;
});
$('#webform').submit(function(e) {
e.preventDefault(); //prevent the default action
$.ajax({
type: "POST",
/*url: "process.php", //process to mail
data: $('form.contact').serialize(),*/
success: function(msg) {
window.location.replace(submityesClicked ? "/submit_resolved_yes.php" : "/submit_resolved_no.php");
},
error: function() {
alert("error");
}
});
});
});
function myFunction(e) {
var text = document.getElementById("text"); //1
var text2 = document.getElementById("text2"); //2
var text3 = document.getElementById("text3"); //3
var text4 = document.getElementById("text4"); //4
e.checked amp;amp; e.getAttribute('id') == 'document1' ? text.style.display = "block" : text.style.display = "none";
e.checked amp;amp; e.getAttribute('id') == 'document2' ? text2.style.display = "block" : text2.style.display = "none";
e.checked amp;amp; e.getAttribute('id') == 'document3' ? text3.style.display = "block" : text3.style.display = "none";
e.checked amp;amp; e.getAttribute('id') == 'document4' ? text4.style.display = "block" : text4.style.display = "none";
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form name="cf2" id="formularos" method="post" action="test.php">
<div class="checkbox-group required">
<p class="center">Vyberte školenie</p>
<label class="container riadok">
<p for="document1" class="dolava">§20 Poučená osoba</p>
<input type="checkbox" class="daychecks" name="document[]" value="20" id="document1" onclick="checkOnlyOne(this.value); myFunction(this)" />
<span class="checkmark"></span>
</label>
<label class="container riadok">
<p for="document" class="dolava">Aktualizácia: §21 AŽ §24</p>
<input type="checkbox" class="daychecks" name="document[]" value="21-24" id="document2" onclick="checkOnlyOne(this.value); myFunction(this)">
<span class="checkmark"></span>
</label>
<label class="container riadok">
<p for="document" class="dolava">§21 AŽ §23 pre EZ</p>
<input type="checkbox" class="daychecks" name="document[]" value="21-23" id="document3" onclick="checkOnlyOne(this.value); myFunction(this)">
<span class="checkmark"></span>
</label>
<label class="container riadok">
<p for="document" class="dolava">§24 Revízny technik</p>
<input type="checkbox" class="daychecks" name="document[]" value="24" id="document4" onclick="checkOnlyOne(this.value); myFunction(this)">
<span class="checkmark"></span>
</label>
<p id="text" style="display:none">ZÁVÄZNÁ PRIHLÁŠKA <br>Na "Kurz o POUČENEJ OSOBE" <br>pre držiteľov platných „Osvedčení“ podľa vyhl. MPSVaR SR č. 508/09 Z. z , § 20, podľa § 16 odst. 4 a 7 zákona č. 124/2006 Z. z., o BOZP a zmene a doplnení niektorých zákonov v znení neskorších predpisov
, ktorými sa dopĺňa zákon č. 355/2007 Z. z., o podpore verejného zdravia, najmä zák. č. 470/2011 Z. z. s vyznačením účasti na origináli „ Osvedčenia“.</p>
<p id="text2" style="display:none">Text 2 <br>Test 2</p>
<p id="text3" style="display:none">Text 3 <br>Test 3</p>
<p id="text4" style="display:none">Text 4 <br>Test 4</p>
</div>
<p class="center">Vyplňte osobné údaje</p>
<input type="text" name="name" id="name" class="form-control" placeholder="Meno" required="required">
<input type="text" name="email" id="email" class="form-control" placeholder="Email" required="required">
<input type="tel" name="phone" id="phone" class="form-control" placeholder="Telefónne číslo" pattern="[0-9] " title="Zadajte iba čísla." required="required">
<input type="hidden" name="send" value="1" />
<button type="submit" value="SEND" id="submit" class="btn btn-primary"> ODOSLAŤ PRIHLÁŠKU</button>
</form>
Комментарии:
1. Спасибо, приятель, это работает. Разве вы не знаете, как я мог бы отредактировать функцию js, чтобы отобразить даже текст2 для флажка document2, например?
2. Я пробовал это, но это не сработало
var checkBox = document.getElementById("document1"); var checkBox2 = document.getElementById("document2"); var text = document.getElementById("text"); var text2 = document.getElementById("text2");
3. @LuboMasura Да, конечно. позвольте мне проверить, как это можно добавить 🙂
4. Если это возможно, мне нужны 4 документа и текст. Теперь у меня есть только один. Большое вам спасибо!!!
5. @LuboMasura Проверьте мой ответ — все работает для вас. Отображение другого текста при другом установленном флажке
Ответ №2:
Я слепой, и я не вводил вызов функции в другие флажки. Исправлено путем добавления функции к каждому флажку.
<label class="container riadok"><p for="document1" class="dolava">§20
Poučená osoba</p>
<input type="checkbox" class="daychecks" name="document[]" value="20"
id="document1" onclick="checkOnlyOne(this.value); myFunction()" />
<span class="checkmark"></span>
</label>
<label class="container riadok"><p for="document"
class="dolava">Aktualizácia: §21 AŽ §24</p>
<input type="checkbox" class="daychecks" name="document[]" value="21-24"
id="document2" onclick="checkOnlyOne(this.value); myFunction()" >
<span class="checkmark"></span>
</label>
<label class="container riadok"><p for="document" class="dolava">§21 AŽ §23
pre EZ</p>
<input type="checkbox" class="daychecks" name="document[]" value="21-23"
id="document3" onclick="checkOnlyOne(this.value); myFunction()" >
<span class="checkmark"></span>
</label>
<label class="container riadok"><p for="document" class="dolava">§24 Revízny
technik</p>
<input type="checkbox" class="daychecks" name="document[]" value="24"
id="document4" onclick="checkOnlyOne(this.value); myFunction()" >
<span class="checkmark"></span>
</label>