Как снять отметку с переключателя?
У меня есть группа переключателей, которые я хочу снять, после отправки формы AJAX с помощью jQuery. У меня есть следующая функция:
function clearForm(){
$('#frm input[type="text"]').each(function(){
$(this).val("");
});
$('#frm input[type="radio":checked]').each(function(){
$(this).checked = false;
});
}
С помощью этой функции я могу очистить значения в текстовых полях, но я не могу очистить значения переключателей.
Кстати, я также пробовал $(this).val("");
, но это не сработало.
Ответы
Ответ 1
либо (plain js)
this.checked = false;
или (jQuery)
$(this).prop('checked', false);
// Note that the pre-jQuery 1.6 idiom was
// $(this).attr('checked', false);
См. справочная страница jQuery prop() для объяснения разницы между attr() и prop() и почему prop() теперь предпочтительнее.
prop() был введен с jQuery 1.6 в мае 2011 года.
Ответ 2
Вам не нужна функция each
$("input:radio").attr("checked", false);
или
$("input:radio").removeAttr("checked");
То же самое относится к вашему текстовому полю:
$('#frm input[type="text"]').val("");
Но вы могли бы улучшить это.
$('#frm input:text').val("");
Ответ 3
Try
$(this).removeAttr('checked')
Так как много браузеров интерпретируют "checked = anything" как true. Это позволит полностью удалить проверенный атрибут.
Надеюсь, что это поможет.
Ответ 4
Небольшая модификация плагина Laurynas на основе кода Игоря. Это позволяет использовать ярлыки, связанные с таргетингом переключателей:
(function ($) {
$.fn.uncheckableRadio = function () {
return this.each(function () {
var radio = this;
$('label[for="' + radio.id + '"]').add(radio).mousedown(function () {
$(radio).data('wasChecked', radio.checked);
});
$('label[for="' + radio.id + '"]').add(radio).click(function () {
if ($(radio).data('wasChecked'))
radio.checked = false;
});
});
};
})(jQuery);
Ответ 5
Спасибо Патрику, ты сделал мой день! Это mousedown вы должны использовать. Однако я улучшил код, чтобы вы могли работать с группой переключателей.
//We need to bind click handler as well
//as FF sets button checked after mousedown, but before click
$('input:radio').bind('click mousedown', (function() {
//Capture radio button status within its handler scope,
//so we do not use any global vars and every radio button keeps its own status.
//This required to uncheck them later.
//We need to store status separately as browser updates checked status before click handler called,
//so radio button will always be checked.
var isChecked;
return function(event) {
//console.log(event.type + ": " + this.checked);
if(event.type == 'click') {
//console.log(isChecked);
if(isChecked) {
//Uncheck and update status
isChecked = this.checked = false;
} else {
//Update status
//Browser will check the button by itself
isChecked = true;
//Do something else if radio button selected
/*
if(this.value == 'somevalue') {
doSomething();
} else {
doSomethingElse();
}
*/
}
} else {
//Get the right status before browser sets it
//We need to use onmousedown event here, as it is the only cross-browser compatible event for radio buttons
isChecked = this.checked;
}
}})());
Ответ 6
Перепишите код Игоря как плагин.
Использование:
$('input[type=radio]').uncheckableRadio();
Plugin:
(function( $ ){
$.fn.uncheckableRadio = function() {
return this.each(function() {
$(this).mousedown(function() {
$(this).data('wasChecked', this.checked);
});
$(this).click(function() {
if ($(this).data('wasChecked'))
this.checked = false;
});
});
};
})( jQuery );
Ответ 7
Для группы радио и радио:
$(document).ready(function() {
$(document).find("input:checked[type='radio']").addClass('bounce');
$("input[type='radio']").click(function() {
$(this).prop('checked', false);
$(this).toggleClass('bounce');
if( $(this).hasClass('bounce') ) {
$(this).prop('checked', true);
$(document).find("input:not(:checked)[type='radio']").removeClass('bounce');
}
});
});
Ответ 8
Попробуйте это, это сделает трюк:
$(document).ready(function() {
$("input[type='radio']").mousedown(function(e) {
if ($(this).attr("checked") == true) {
setTimeout("$('input[id=" + $(this).attr('id') + "]').removeAttr('checked');", 200);}
else {
return true
}
});
});
Ответ 9
Try
$(this).attr("checked" , false );
Ответ 10
Вы также можете имитировать поведение радиообмена, используя только флажки:
<input type="checkbox" class="fakeRadio" checked />
<input type="checkbox" class="fakeRadio" />
<input type="checkbox" class="fakeRadio" />
Затем вы можете использовать этот простой код для работы для вас:
$(".fakeRadio").click(function(){
$(".fakeRadio").prop( "checked", false );
$(this).prop( "checked", true );
});
Он отлично работает, и у вас больше контроля над поведением каждой кнопки.
Вы можете попробовать это самостоятельно: http://jsfiddle.net/almircampos/n1zvrs0c/
Эта вилка также позволяет отменить выбор всех в соответствии с запросом в комментарии:
http://jsfiddle.net/5ry8n4f4/
Ответ 11
Просто поставьте следующий код для jQuery:
jQuery("input:radio").removeAttr("checked");
И для javascript:
$("input:radio").removeAttr("checked");
Нет необходимости устанавливать какой-либо цикл foreach,.each() fubction или любую вещь
Ответ 12
$('#frm input[type="radio":checked]').each(function(){
$(this).checked = false;
});
Это почти хорошо, но вы пропустили [0]
Правильно → > $(this)[0].checked = false;
Ответ 13
Используйте этот
$("input[name='nameOfYourRadioButton']").attr("checked", false);
Ответ 14
function setRadio(obj)
{
if($("input[name='r_"+obj.value+"']").val() == 0 ){
obj.checked = true
$("input[name='r_"+obj.value+"']").val(1);
}else{
obj.checked = false;
$("input[name='r_"+obj.value+"']").val(0);
}
}
<input type="radio" id="planoT" name="planoT[{ID_PLANO}]" value="{ID_PLANO}" onclick="setRadio(this)" > <input type="hidden" id="r_{ID_PLANO}" name="r_{ID_PLANO}" value="0" >
: D
Ответ 15
$('input[id^="rad"]').dblclick(function(){
var nombre = $(this).attr('id');
var checked = $(this).is(":checked") ;
if(checked){
$("input[id="+nombre+"]:radio").prop( "checked", false );
}
});
Каждый раз, когда у вас есть двойной клик в проверенной радио, отмеченные изменения меняются на false
Мои радиостанции начинаются с id=radxxxxxxxx
, потому что я использую этот селектор id.
Ответ 16
function clearForm(){
$('#frm input[type="text"]').each(function(){
$(this).val("");
});
$('#frm input[type="radio"]:checked').each(function(){
$(this).attr('checked', false);
});
}
Правильный селектор: #frm input[type="radio"]:checked
не #frm input[type="radio":checked]