2013-11-23 2 views
0

У меня есть следующий фрагмент HTML кода для формы флажковJQuery Validation по крайней мере, один флажок

<div class="drinking col-xs-12"> 
    <div class="col-xs-7 drinkingLeft"> 
    <input type="checkbox" name="allwines" id="allwines" value="0" class="require-one col-xs-1 styled myClassA" value="0" data-label="All Wines" /> 
    <input id='allwinesHidden' type='hidden' value='0' name='allwines'> 
    </div> 
    <div class="col-xs-5 drinkingLeft"> 
    <input type="checkbox" name="beer" id="beer" value="0" class="require-one col-xs-1 styled myClassB" value="0" data-label="Beer" /> 
    <input id='beerHidden' type='hidden' value='0' name='beer'> 
    </div> 
    <div class="clearix"></div> 
    <div class="col-xs-7 drinkingLeft"> 
    <input type="checkbox" name="redwines" id="redwines" value="0" class="require-one col-xs-1 styled myClassC" value="0" data-label="Red Wines" /> 
    <input id='redwinesHidden' type='hidden' value='0' name='redwines'> 
    </div> 
    <div class="col-xs-5 drinkingLeft"> 
    <input type="checkbox" name="cider" id="cider" value="0" class="require-one col-xs-1 styled myClassD" value="0" data-label="Cider" /> 
    <input id='ciderHidden' type='hidden' value='0' name='cider'> 
    </div> 
    <div class="clearix"></div> 
    <div class="col-xs-7 drinkingLeft"> 
    <input type="checkbox" name="whitewines" id="whitewines" value="0" class="require-one col-xs-1 styled myClassE" value="0" data-label="White Wines" /> 
    <input id='whitewinesHidden' type='hidden' value='0' name='whitewines'> 
    </div> 
    <div class="col-xs-5 drinkingLeft"> 
    <input type="checkbox" name="spirits" id="spirits" value="0" class="require-one col-xs-1 styled myClassF" value="0" data-label="Spirits" /> 
    <input id='spiritsHidden' type='hidden' value='0' name='spirits'> 
    </div> 
    <div class="clearix"></div> 
    <div class="col-xs-7 drinkingLeft"> 
    <input type="checkbox" name="sparkling" id="sparkling" value="0" class="require-one col-xs-1 styled myClassG" value="0" data-label="Sparkling/Champagne" /> 
    <input id='sparklingHidden' type='hidden' value='0' name='sparkling'> 
    </div> 
    <div class="col-xs-5 drinkingLeft"> 
    <input type="checkbox" name="fortified" id="fortified" value="0" class="require-one col-xs-1 styled myClassH" value="0" data-label="Fortified" /> 
    <input id='fortifiedHidden' type='hidden' value='0' name='fortified'> 
    </div> 
    <div id="error_msg3"></div> 
    <div class="clearix"></div> 
</div> 
</div> 

Я хочу, чтобы убедиться, что по крайней мере один из флажков выбран.

Я хочу, чтобы NOT в качестве окна оповещения; однако сообщение должно появиться в ошибке div-msg3.

Обратите внимание, что все входы имеют разные имена классов и идентификаторы. Ссылка постановка на

https://bitly.com/1i3f1MY

Я использую JQuery проверки для проверки остальной части формы. Будет приятно получить решение через проверку jquery.

Заранее спасибо

+0

Я добавил код в jsfiddle. http://jsfiddle.net/dHrvT/15/ –

+0

Обновлено jsfiddle http://jsfiddle.net/dHrvT/17/ –

+0

Повторное повторение: * имена/идентификаторы каждого из этих флажков разные * Когда пользователь нажимает кнопку отправки Мне нужно следующее: * Если флажок не установлен, тогда сообщение об ошибке появляется так же, как и другое сообщение об ошибке *, когда установлен один из флажков, сообщение об ошибке должно быть снова скрыто * и если пользователь отключает всю ошибку снова сообщение об ошибке должно быть снова показано. И нет, я не могу иметь имена все равно. Он использует пользовательский флажок (довольно флажок). –

ответ

3

Вы должны изменить имя атрибуты флажков, и добавить правило для него с minlength набор к 1.

Вы можете после того, как показать пользовательские сообщения и добавить его в #error_msg3 с:

if(element.attr("name") == "check") error.appendTo("#error_msg3") 

EDIT

$("input[type='checkbox'][name='check']").change(function() { 
    if ($("input[type='checkbox'][name='check']:checked").length){ 
     $(this).valid() 
    } 
}) 

ЭОД T 2

Я обновил Fiddle, теперь сообщение переключается правильно, если у вас установлен хотя бы один флажок.

$("input[type='checkbox'][name='check']").change(function() { 
    $('#submitDetails').valid(); 
}); 


Fiddle here

+0

Я пробовал ваш jsfiddle. Когда я нажимаю кнопку отправки и флажок не установлен, я получаю сообщение об ошибке. Однако, когда флажок установлен сейчас, сообщение об ошибке не исчезает. Также он должен включать и выключать, когда флажок установлен и не проверен. То есть, когда ничего не проверено, оно должно иметь сообщение об ошибке .. и при проверке выпадающих сообщений об ошибках, как и другие поля ошибок –

+0

Чтобы удалить сообщение об ошибке, когда установлен флажок, я обновил Fiddle, см. edit. –

+0

Спасибо. В любом случае, он не возвращается снова, если пользователь отключит его. Итак, скажем, что пользователь нажимает кнопку отправки, он получает сообщение об ошибке. Когда пользователь выбирает один из флажков, сообщение об ошибке исчезает. (Прекрасно до сих пор). однако, если пользователь теперь решит снять флажок, сообщение об ошибке должно появиться справа. Он должен переключаться с изменением справа –

1

Попробуйте с этим

$("#YourbuttonId").click(function(){ 
    if($('input[type=checkbox]:checked').length == 0) 
    { 
     alert('Please select atleast one checkbox'); 
    } 
}); 

плагином

HTML

<label class="checkbox inline"> 
<input type="checkbox" id="typecb1" name="spamm[]" value="Loading Point"> Loading Point 
</label> 
<label class="checkbox inline"> 
<input type="checkbox" id="typecb2" name="spamm[]" value="Unloading Point"> Unloading Point 
</label> 
<label class="checkbox"> 
<input type="checkbox" id="typecb3" name="spamm[]" value="Retailer Unloading"> Retailer Unloading 
</label> 

Script

rules:{ 
    "spamm[]": { 
     required: true, 
     minlength: 1 
     } 
    } 
+1

Пожалуйста, не поле для предупреждения. Как я уже сказал, нет окна предупреждения. Если возможно, как решение, интегрированное с плагином проверки jQuery, как указано –

+1

см. Обновленный ответ @Himu –

+0

работает хорошо спасибо –

1

Попробуйте

добавить этот код будет делать

var chck = $('input[type=checkbox]'); 
chck.addClass('check-one'); 
$.validator.addMethod('check-one', function (value) { 
    return (chck.filter(':checked').length > 0); 
}, 'Check at least one checkbox'); 


fiddle Demo

Group покажет ошибку перед первым проверить ящик только

var chck = $('input[type=checkbox]'); 
chck.addClass('check-one'); 
$.validator.addMethod('check-one', function (value) { 
    return (chck.filter(':checked').length > 0); 
}, 'Check at least one checkbox'); 
var chk_names = $.map(chck, function (el, i) { 
    return $(el).prop("name"); 
}).join(" "); 
$("#submitDetails").validate({ 
    groups: { 
     checks: chk_names 
    }, 
    submitHandler: function (form) { 
     alert('Form Submited'); 
     return false; 
    } 
}); 


Удалить группу, если вы хотите ошибки, чтобы показать перед всеми галочками

fiddle Demo

$("#submitDetails").validate({ 
    submitHandler: function (form) { 
     alert('Form Submited'); 
     return false; 
    } 
}); 
+0

Спасибо Tushar. Ваш ответ так близок. Вы можете увидеть его здесь https://bitly.com/1i3f1MY Он работает в jsfillde. Что я делаю не так? Вот файл js, который я использую bit.ly/1aNWWMl. Вы можете увидеть код, который я добавил. Когда вы нажимаете кнопку отправки, она появляется после всех ярлыков ... не так, как в jsFiddle. Он должен быть похож на jsFiddle ...Когда кнопка отправки нажата, она должна отображаться внутри

, и при каждом щелчке по галочке сообщение об ошибке должно исчезнуть. –

+0

Красный сталкиваются. Я думаю, что я считаю свою ошибку. Подождите мин .. исправление –

+0

Привет. Попытался это исправить. Couldnt. Дайте мне знать, можете ли вы помочь мне решить эту проблему. Спасибо –

2

Цитата OP:

«Я хочу, чтобы убедиться, что в выбран один из флажков. "

Если вы хотите использовать плагин JQuery Validate, и все чекбоксы имеют различную name, просто использовать метод require_from_group, который является частью the additional-methods.js file.

Поскольку у вас уже есть общий класс на этих флажках с именем require-one, это еще проще.

$('#form').validate({ 
    rules: { 
     fieldname: { 
      require_from_group: [1, '.require-one'] 
     }, 
     // declare same rule on all eight checkboxes 
     .... 
     .... 
    } 
}); 

Однако, вместо того, чтобы объявлять все восемь из них в .validate(), вы можете использовать метод .rules('add') внутри JQuery .each() объявить их все сразу.

$('.require-one').each(function() { 
    $(this).rules('add', { 
     require_from_group: [1, this], 
     messages: { 
      require_from_group: "please check one" 
     } 
    }); 
}); 

Затем объединить все восемь сообщений в один, используйте опцию groups ...

$('#form').validate({ 
    groups: { // combine these error messages into one 
     checkboxes: 'allwines beer redwines cider whitewines spirits sparkling fortified' 
    } 
}); 

Работа DEMO: http://jsfiddle.net/JVWu2/1/

Размещение вашего сообщения об ошибке в поле #error_msg3 ошибок является ничем не отличается от размещения каких-либо из ваших других сообщений jQuery Validate.

+0

Привет @Sparky, я добавил свои коды внутри jsfiddle http: // jsfiddle. net/dHrvT/15 /. Тем не менее, это нормально для вас, чтобы добавить свое решение и сообщить мне, если оно работает. Я пытался в реальных промежуточных ссылках и не смог. Я действительно считаю, что ваше решение работает. Я просто не могу интегрировать его с другим –

+0

@Himu, [я полностью ответил на ваш вопрос, как вы его первоначально разместили) (http://jsfiddle.net/JVWu2/). В вашем OP ничего не упоминалось об интеграции этого с 'prettyCheckable'. ИМО, это совершенно другая проблема. Плагин jQuery Validate смотрит только на ваши реальные элементы флажка, и пока вы не сможете понять, как их переключать, это никогда не сработает. – Sparky

+0

@Himu, я также заметил, что ваш код jQuery излишне повторяется. Почти все ваши обработчики '.on ('change')' можно объединить в один, и вам нужно будет только один раз вызвать '.prettyCheckable()'. Это просто вопрос использования правильных селекторов jQuery для одновременного выбора всех целевых элементов. – Sparky

7

Это очень просто ......

function validate_form() 
{ 
valid = true; 

if($('input[type=checkbox]:checked').length == 0) 
{ 
    alert ("ERROR! Please select at least one checkbox"); 
    valid = false; 
} 

return valid; 
} 

HTML

<form name="myform" method="post" action="#" onsubmit="return validate_form();"> 
<input type="checkbox" name="box1" value="box1">Box1 
<input type="checkbox" name="box2" value="box2">Box2 
<input name="submit" type="submit" value="Submit"/> 
</form> 
Смежные вопросы