AJAXフォームがjQueryを使って送信された後にチェックを外したいラジオボタンのグループがあります。以下の機能があります。
function clearForm(){
$('#frm input[type="text"]').each(function(){
$(this).val("");
});
$('#frm input[type="radio":checked]').each(function(){
$(this).checked = false;
});
}
この機能を使用して、テキストボックスの値をクリアできますが、ラジオボタンの値をクリアすることはできません。
ところで、私は$(this).val("");
も試しましたが、うまくいきませんでした。
どちらか(プレーンjs)
this.checked = false;
または(jQuery)
$(this).prop('checked', false);
// Note that the pre-jQuery 1.6 idiom was
// $(this).attr('checked', false);
attr()とprop()の違いとprop()がなぜ今あるのかについての説明は jQuery prop()ヘルプページ 好ましい。
prop()は、2011年5月にjQuery 1.6で導入されました。
each
関数は必要ないでしょう
$("input:radio").attr("checked", false);
または
$("input:radio").removeAttr("checked");
テキストボックスにも同じことが当てはまります。
$('#frm input[type="text"]').val("");
しかし、あなたはこれを改善することができます
$('#frm input:text').val("");
試します
$(this).removeAttr('checked')
多くのブラウザは 'checked = anything'をtrueと解釈します。これはchecked属性をすべて削除します。
お役に立てれば。
Igorのコードに基づく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);
ありがとうPatrick、あなたは私の日を作ったよ!それはあなたが使わなければならないということです。ただし、ラジオボタンのグループを処理できるようにコードを改善しました。
//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;
}
}})());
Igorのコードをプラグインとして書き換えます。
つかいます:
$('input[type=radio]').uncheckableRadio();
プラグイン
(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 );
ラジオとラジオグループの場合:
$(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');
}
});
});
これを試して、これはトリックを行います:
$(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
}
});
});
試します
$(this).attr("checked" , false );
チェックボックスのみを使用してラジオボタンの動作をシミュレートすることもできます。
<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/ /
JQueryに次のコードを追加するだけです。
jQuery("input:radio").removeAttr("checked");
そしてJavaScriptの場合:
$("input:radio").removeAttr("checked");
Foreachループ、.each()関数、その他何も配置する必要はありません。
これを使って
$("input[name='nameOfYourRadioButton']").attr("checked", false);
未チェックのラジオボタンにこのJQueryを使用できます。
$('input:radio[name="IntroducerType"]').removeAttr('checked');
$('input:radio[name="IntroducerType"]').prop('checked', false);
$('#frm input[type="radio":checked]').each(function(){
$(this).checked = false;
});
これはほとんど良いですが、あなたは逃しました[0]
修正する - >> $(this)[0].checked = false;
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