У меня есть следующий код:
$("input.edit_user").click(function() {
var theCheckboxes = $("input[type='checkbox']");
if (theCheckboxes.filter(":checked").length > 1)
$(this).removeAttr("checked");
alert( "Please selected one user at a time for editing." );
});
.
.
.
<tr>
<td><input type="checkbox" name="user_id[]" value="1"></td>
<td><input type="checkbox" name="user_id[]" value="2"></td>
<td><input type="checkbox" name="user_id[]" value="3"></td>
</tr>
.
.
.
<input type="submit" name="submit" value="Edit Selected User" class="edit_user">
Я использую флажки, потому что есть другие параметры, которые позволяют выбрать более одного элемента.
Однако, когда пользователь выбирает флажок для редактирования, мне нужно предупредить их, что им разрешено только один флажок.
Я думаю, что у меня есть правильная идея с моим кодом, но я ошибаюсь, поскольку он не работает и просто продолжает обрабатывать страницу в обычном режиме.
Предложения?
ОБНОВЛЕНИЕ на выбранное решение и почему
Для жизнеспособных решений ниже, как только я добавил:
$(document).ready(function() {
в моем рабочем примере они начали работать. Я выбрал ответ, который я сделал, потому что после того, как была добавлена вышеприведенная строка, все, что мне было нужно, это
return false;
line (и правильные скобки для внутреннего оператора if), чтобы остановить выполнение страницы.
Спасибо всем за вашу помощь в решении этого!
Я думаю, вы должны вернуть false
:
$("input.edit_user").click(function() {
var theCheckboxes = $("input[type='checkbox']");
if (theCheckboxes.filter(":checked").length > 1) {
$(this).removeAttr("checked");
alert( "Please selected one user at a time for editing." );
return false;
}
});
Несколько вещей здесь:
click
от публикации данных, когда условие не выполняется. Вы можете сделать это с return false;
например.if
ветка имеет только одну строку. Отсутствуют фигурные скобки?checked
атрибут. Например, у них их нет в вашем случае. Однако то, что изменяется при щелчке по галочке, является значением его checked
свойства. К этому следует обратиться с помощью метода prop
.if
не меняет область действия, поэтому $(this)
относится к кнопке, а не к флажку.В общем, исправленный скрипт:
$("input.edit_user").click(function() {
var theCheckboxes = $("input[type='checkbox']");
if (theCheckboxes.filter(":checked").length > 1) {
theCheckboxes.prop("checked", false);
alert( "Please selected one user at a time for editing." );
return false;
}
});
Вы используете неправильные селекторы. Вот код jquery для вашего дела:
$(".edit_user").click(function () {
var $checkboxes = $("input[type='checkbox']");
if ($("input[type='checkbox']:checked").length > 1) {
$("input[type='checkbox']").removeAttr("checked");
alert("Please select one user at a time for editing.");
}
});
Вот рабочая скрипка: http://jsfiddle.net/639yH/
Ваш селектор ошибочен. Вы используете $("input.edit_user")
, но входы в вашем html не имеют класса edit_user
.
Извините, не смотрел достаточно близко. Вот что вам нужно:
$('input[type="submit"]').on('click', function() {
var $checkBoxes = $('input[type="checkbox"]');
var checkCount = 0;
$checkBoxes.each(function(){ if( this.checked ) checkCount++; });
if( checkCount > 1 ) {
$checkBoxes.removeAttr('checked');
alert( 'Please selected one user at a time for editing.' );
}
});
(скрипка)