проверьте, установлен ли только один флажок

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

У меня есть семь флажков, например:

 <div class="contact-label span11 rights">
          <div class="row-fluid">
            <div class="span3">
              <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canorder_0" id="contactpersonen_canorder_0"></input>
              <label class="checkbox" for="contactpersonen_canorder_0">Mag border plaatsen</label>

              <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseestock_0" id="contactpersonen_canseestock_0"></input>
              <label class="checkbox" for="contactpersonen_canseestock_0">Mag gderen afhalen</label>
            </div>
            <div class="span3">
              <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseeorders_0" id="contactpersonen_canseeorders_0"></input>
              <label class="checkbox" for="contactpersonen_canseeorders_0">Mag orders inzien</label>

              <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canaddaddress_0" id="contactpersonen_canaddaddress_0"></input>
              <label class="checkbox" for="contactpersonen_canaddaddress_0">Mag bezorgadressen aanpassen</label>
            </div>
            <div class="span3">
              <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseeprice_0" id="contactpersonen_canseeprice_0"></input>
              <label class="checkbox" for="contactpersonen_canseeprice_0">Mag netto prijs zien</label>

              <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseecredit_0" id="contactpersonen_canseecredit_0"></input>
              <label class="checkbox" for="contactpersonen_canseecredit_0">Mag facturen en creditfacturen inzien</label>
            </div>
            <div class="span3">
              <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseepickup_0" id="contactpersonen_canseepickup_0"></input>
              <label class="checkbox" for="contactpersonen_canseepickup_0">Mag wijzigingen doorgeven</label>
            </div>
          </div>
        </div>
  

и у меня есть функция javascript для проверки дубликатов электронной почты, например:

 $.validator.addMethod("contactpersonen-email", function(value, element) {
    var parentForm = $(element).closest('form');
    var timeRepeated = 0;
    if (value != '') {
        $(parentForm.find(':text')).each(function () {
            if ($(this).val() === value) {
                timeRepeated  ;
            }
        });
    }

    var ok = timeRepeated === 1 || timeRepeated === 0;
    if(!ok) alert('Emaild adres bestaat al');
    return ok;
}, "Email adres bestaat al");
  

Но теперь, если установлен только этот флажок:

 <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseestock_0" id="contactpersonen_canseestock_0"></input>
              <label class="checkbox" for="contactpersonen_canseestock_0">Mag gderen afhalen</label>
  

Затем необходимо пропустить функцию дублирования электронной почты

Но каков самый простой способ проверить это? Или вы должны проверить, не установлен ли каждый другой флажок?

Спасибо

это скриншот для наглядности:

введите описание изображения здесь

Хорошо, но если я сделаю это так:

 $.validator.addMethod("contactpersonen-email", function(value, element) {
    var parentForm = $(element).closest('form');
    var timeRepeated = 0;
    if (value != '') {
        $(parentForm.find(':text')).each(function () {
            if ($(this).val() === value) {
                timeRepeated  ;
            }
        });
    }






 //
$("#contactpersonen_canseestock_0").attr('checked', true);
//Alleen een is checked en dat is Mag gderen afhalen
if ($("#contactpersonen_canseestock_0").is(":checked") amp;amp; $('#formid :checkbox:checked').length == 1) {
  alert("checked");
} else {
  // any other check box is checked or none
  alert("other combination");
}

//
    var ok = timeRepeated === 1 || timeRepeated === 0;
    if(!ok) alert('Emaild adres bestaat al');
    return ok;
}, "Email adres bestaat al");
  

это происходит только в: установлен любой другой флажок или нет

см. Изображение: введите описание изображения здесь

Если я попробую это так:

 $.validator.addMethod("contactpersonen-email", function(value, element) {
    if($("#contactpersonen_canseestock_0").is(':checked')) {
    console.log('email is nice');
    var parentForm = $(element).closest('form');
    var timeRepeated = 0;
    if (value != '') {
        $(parentForm.find(':text')).each(function () {
            if ($(this).val() === value) {
                timeRepeated  ;
            }       
        });
    }
    var ok = timeRepeated === 1 || timeRepeated === 0;
    if(!ok) alert('Emaild adres bestaat al');
    return ok;
}else{
console.log('jkshdfkjsdhf');
return;
}}, "email bestaat al" )
  

это не работает. см. Изображение:

введите описание изображения здесь

оке. Теперь у меня это так:

 $.validator.addMethod("contactpersonen-email", function(value, element) {
    var parentForm = $(element).closest('form');
    var timeRepeated = 0;
    if (value != '') {
        $(parentForm.find(':text')).each(function () {
            if ($(this).val() === value) {
                timeRepeated  ;
            }
        });
    }

 //


//
    var ok = timeRepeated === 1 || timeRepeated === 0;
    $("#contactpersonen_canseestock_0").attr('checked', true);
//Alleen een is checked en dat is Mag gderen afhalen
if ($("#contactpersonen_canseestock_0").is(":checked") amp;amp; $('#formid :checkbox:checked').length == 1) {
  console.log("checked");
    return;
} else {
    if(!ok) alert('Emaild adres bestaat al');
    return ok;

  // any other check box is checked or none
  console.log("other combination");
}   



    //if(!ok) alert('Emaild adres bestaat al');
    //return ok;
}, "Email adres");
  

итак, я вижу, что он входит:

 console.log("checked");
  

. Но он также входит в нее:

  }, "Email adres");
  

Чего, конечно, не должно быть.

возможно, это происходит потому, что у меня выше в файле это:

 contactpersonen_email1:{
                                        required:true,
                                        email:true
                                        },  
  

Но тогда это, конечно, не требуется, если установлен первый флажок.

Спасибо

и если сделать это так:

 if ($("#contactpersonen_canseestock_0").is(":checked") amp;amp; $('#formid :checkbox:checked').length == 1) {
  console.log("checked");
    return;
} else {
    if(!ok) alert('Emaild adres bestaat al');
    console.log('not checked');
    return ok;

  // any other check box is checked or none
  console.log("other combination");
}   


return;
    //if(!ok) alert('Emaild adres bestaat al');
    //return ok;
});
  

итак, это:

    });  then I will get this warning:
  

Предупреждение: для contactpersonen_email не определено сообщение

Как объединить этот метод:

 $('#formid :checkbox').change(function() {
//only one is checked and that is Mag gderen afhalen
if ($("#contactpersonen_canseestock_0").is(":checked") amp;amp; $('#formid :checkbox:checked').length == 1) {
  console.log("only Mag gderen afhalen checked");
} else {
  // any other check box is checked or none
  console.log("other combination");
}});
  

с помощью этого метода:

 $.validator.addMethod("contactpersonen-email", function(value, element) {
    var parentForm = $(element).closest('form');
    var timeRepeated = 0;
    if (value != '') {
        $(parentForm.find(':text')).each(function () {
            if ($(this).val() === value) {
                timeRepeated  ;
            }
        });
    }


    var ok = timeRepeated === 1 || timeRepeated === 0;
    if(!ok) alert('Emaild adres bestaat al');
    return ok;
}, "Email adres bestaat al");
  

Спасибо

Комментарии:

1. Вам не нужен радиовход?

2. спасибо. нет. не радио. Потому что у вас установлены флажки

3. UM $(".checkbox:checked").length ?? Это то, о чем вы спрашиваете?

Ответ №1:

Вы можете проверить конкретную проверку по идентификатору, а затем узнать о других по идентификатору формы. Проверьте эту скрипку или прикрепленный фрагмент.

 $('#formid :checkbox').change(function() {
//only one is checked and that is Mag gderen afhalen
if ($("#contactpersonen_canseestock_0").is(":checked") amp;amp; $('#formid :checkbox:checked').length == 1) {
  console.log("only Mag gderen afhalen checked");
} else {
  // any other check box is checked or none
  console.log("other combination");
}});  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="contact-label span11 rights" id="formid">
  <div class="row-fluid">
    <div class="span3">
      <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canorder_0" id="contactpersonen_canorder_0"></input>
      <label class="checkbox" for="contactpersonen_canorder_0">Mag border plaatsen</label>

      <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseestock_0" id="contactpersonen_canseestock_0"></input>
      <label class="checkbox" for="contactpersonen_canseestock_0">Mag gderen afhalen</label>
    </div>
    <div class="span3">
      <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseeorders_0" id="contactpersonen_canseeorders_0"></input>
      <label class="checkbox" for="contactpersonen_canseeorders_0">Mag orders inzien</label>

      <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canaddaddress_0" id="contactpersonen_canaddaddress_0"></input>
      <label class="checkbox" for="contactpersonen_canaddaddress_0">Mag bezorgadressen aanpassen</label>
    </div>
    <div class="span3">
      <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseeprice_0" id="contactpersonen_canseeprice_0"></input>
      <label class="checkbox" for="contactpersonen_canseeprice_0">Mag netto prijs zien</label>

      <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseecredit_0" id="contactpersonen_canseecredit_0"></input>
      <label class="checkbox" for="contactpersonen_canseecredit_0">Mag facturen en creditfacturen inzien</label>
    </div>
    <div class="span3">
      <input type="checkbox" class="input-text" value="Y" name="contactpersonen_canseepickup_0" id="contactpersonen_canseepickup_0"></input>
      <label class="checkbox" for="contactpersonen_canseepickup_0">Mag wijzigingen doorgeven</label>
    </div>
  </div>
</div>  

Комментарии:

1. Спасибо. Я проверю это. Я дам вам знать.

2. привет. Вы видите изображение?

3. ДА. Я только что это увидел. отредактировав фрагмент, запустите его и установите различные комбинации флажков. Оператор if будет иметь значение true только в том случае, если Mag gderen afhalen установлен флажок ONLY .

4. Еще одна вещь, я присвоил идентификатор корневому div, содержащему флажки. <div class="contact-label span11 rights" id="formid"> Это используется для получения всех значений дочерних флажков в этом div. Добавьте это тоже в свой код, когда попробуете.

5. Вы видели мое последнее обновление? Он всегда приходит к этой строке: «Адреса электронной почты уже существуют»);

Ответ №2:

я думаю, ваш вопрос о том, сколько проверено, а не о том, проверен ли определенный флажок..

$("input[type='checkbox']:checked").length даст вам количество установленных флажков..

Ответ №3:

Для этого вам не нужен jQuery…

 //To count how many are checked/ticked
document.querySelectorAll('input[type="checkbox"]:checked').‌​length

//To check a specific checkbox...
if(document.getElementById('contactpersonen_canseestock_0').checked) {
    // It is checked, do something
} else {
    // Not checked, do something else
}
  

Но если вы хотите jQuery…

 if($("#contactpersonen_canseestock_0").is(':checked')){
    // It is checked, do something
} else {
    // Not checked, do something else
}
  

Редактировать:

 $.validator.addMethod("contactpersonen-email", function(value, element) {

    if($("#contactpersonen_canseestock_0").is(':checked')) {
        var parentForm = $(element).closest('form');
        var timeRepeated = 0;
        if (value != '') {
            $(parentForm.find(':text')).each(function () {
                if ($(this).val() === value) {
                    timeRepeated  ;
                }
            });
        }

        var ok = timeRepeated === 1 || timeRepeated === 0;
        if(!ok) alert('Emaild adres bestaat al');
        return ok;
    } else {
        return;
    }

}, "Email adres bestaat al");
  

Комментарии:

1. Спасибо. Но теперь можно установить и другие флажки. Должно быть, если установлен только contactpersonen_canseestock_0, проверка электронной почты должна быть опущена () .

2. и это было бы уместно, если бы ему пришлось включать jquery только для этой одной задачи..

3. Код в моем примере будет выполняться, только если этот конкретный флажок установлен, для всех остальных флажков он попадет в else { … } условие. Вам нужно будет включить это в событие щелчка, обновит код..

4. @SavantCode Я обновил свой ответ несколькими различными примерами, поскольку я не совсем уверен, чего вы пытаетесь достичь

5. @Zinc. Да, оке. Но функция проверки электронной почты должна быть опущена только и только в том случае, если установлен флажок contactpersonen_canseestock_0 . если установлен флажок contactpersonen_canseestock_0 и установлен другой флажок, то функция электронной почты не была опущена

Ответ №4:

Вы можете просто сделать, как;

 document.querySelectorAll("[type=checkbox]:checked").length === 1
  

В вашем случае точнее:

 document.querySelector("div.contact-label.span11.rights")
        .querySelectorAll("[type=checkbox]:checked").length === 1 ? doThis()
                                                                  : doThat();
  

Ответ №5:

Поскольку вы хотите только проверить, установлен ли этот конкретный флажок, с небольшим количеством jQuery это просто… Используйте условные выражения и :проверено, например:

 if($("#contactpersonen_canseestock_0").is(":checked")){

     //Skip Function

}
else{
     doThisFunction();
}
  

Надеюсь, это поможет. С уважением 🙂

Комментарии:

1. проверьте, был ли ваш ответ уже опубликован. не полезно иметь один и тот же точный ответ 500 раз на вопрос..

2. Спасибо. Но только если этот флажок установлен. Таким образом, могут быть проверены и другие флажки. Смотрите мое изображение

3. Извините, не понял, что … пока я писал, кто-то ответил тем же.

4. в этом и суть. Конечно, я могу проверить, не установлены ли все остальные флажки. но это, конечно, большая работа. может быть, это может быть по-другому. Спасибо

5. @edd2110. Поэтому, конечно, ваше предложение не устраняет проблему. Потому что, если другие флажки также будут проверены.. Но все равно спасибо за ваш ответ