2011-12-07 3 views
0

У меня есть следующий флажокJquery Checkbox Input Validation

<input type="checkbox" name="compare[]" value="<?php echo $product_id ?>" /> 

Теперь я хочу, чтобы мои пользователи выбирают минимум три и максимум три опции из выше флажка. Нарушение любого из правил даст сообщение.

Не могли бы вы любезно помочь мне, как это сделать с JQuery?

Спасибо заранее

+1

Вы пробовали что-нибудь? – talnicolas

+0

Почему «имя» флажка «compare []»? Зачем нужны скобки? Надеюсь, вы не думаете, что добавив скобки к имени ввода, что он сделает несколько вводов ... –

ответ

0

Вы можете перебирает ваш флажок, используя jQuery.each(), проверка проверяемых элементов и добавление проверки к отсчету. Затем, если счетчик не равен 3, вы можете вывести сообщение об ошибке проверки.

$(function(){ 
$("#frm").submit(function(){ 
    var checkCount = 0; 
    var min = 3; 
    var max = 3; 

    // iterate over checkbox's using jquery each() 
    // use jquery's attribute contains selector (http://api.jquery.com/attribute-contains-selector/) 
    // to grab the compare portion of the checkbox field name 
    $("input[name*='compare']").each(function(k, v) { 

    // increment check count when a checked checkbox is found 
    if($(this).is(":checked")) 
     checkCount++; 
    }); 

    //validate checkbox count against predefined range 
    if(checkCount < min || checkCount > max) 
    { 
     console.log("Checkbox Validation Failed"); 
     return false; 
    } 
    else 
     console.log("Checkbox Validation Passed"); 

}); 
}); 
+0

Благодарим вас за ответ. Я пошел по ссылке, которую вы дали, и я попытался понять приведенный здесь пример, но, как оказалось, я не знаю, что они говорят. Прошу вас, пожалуйста, объяснить мне, как это сделать, когда ваше имя поля похоже на: fieldname [] ?? Спасибо :) –

+0

Пример кода с комментариями теперь включен – Midio

2

Вот 1 решение

var $chkbox = $('input[name=compare]'); 
$chkbox.click(function (e) { 
    if ($chkbox.filter(':checked').length > 3) { 
     e.target.checked = false; 
    } 
}); 

http://jsfiddle.net/H96nz/

var $chkbox = $('input[type="checkbox"]'); 

$chkbox.click(function (e) { 
    if ($chkbox.filter(':checked').length > 3) { 
     e.target.checked = false; 
    } 
}); 
+0

Спасибо Тревор за ответ. Ваш скрипт не работает, может быть, потому что мое имя поля - name = "compare []" –

+0

Ну, измените имя или используйте другой селектор. В любом случае, это ваше решение. Возможно, вам придется изменить некоторые вещи, но это действительно сработает. См. Мое редактирование. – Trevor