チェックボックスを選択して、2つの入力フィールドを無効または非表示にするフォームがあります。 document.readyで簡単にできますが、これらのフィールドを追加しているので、関数は有効になりません。 onClickで関数を呼び出すにはどうすればよいですか?
ここに私の作業コードがあります
_$(function() {
$(checkbox).click(function() {
if ($('#checkbox').is(':checked')) {
$('#appTimes').find('input').attr('disabled', true);
} else {
$('#appTimes').find('input').removeAttr('disabled');
}
});
});
_
_<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="appTimes" id="appTimes">
<input name="stopTime1" type="text" id="stopTime1" />
<input name="stopTime12" type="text" id="stopTime12" />
</div>
<input name="checkbox" type="checkbox" id="checkbox" />
_
そして、これは私がやろうとしていることです
_function boxDisable(e) {
$(this).click(function() {
if ($(this).is(':checked')) {
$(e).find('input').attr('disabled', true);
} else {
$(e).find('input').removeAttr('disabled');
}
});
}
_
_<div class="appTimes" id="appTimes">
<input name="stopTime1" type="text" id="stopTime1" />
<input name="stopTime12" type="text" id="stopTime12" />
</div>
<input name="checkbox" onclick="boxdisable(appTimes);" type="checkbox" id="checkbox" />
_
--- EDIT ---------------再定義させてください:私のコードは.appendを使用して作成しますmultiple上記のコードのインスタンス。追加の量は無制限なので、$('#id')
、$('#id1')
..などのように数百個ある可能性があるため、$('#id2')
でチェックボックスを定義できません。 onClickと呼ばれるcheckboxで呼び出されるbeforehead div(alsoが追加される)と呼ばれる、正確な要素IDの言及を避ける機能が必要です。
できます :)
function boxDisable(e, t) {
if (t.is(':checked')) {
$(e).find('input').attr('disabled', true);
} else {
$(e).find('input').removeAttr('disabled');
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="appTimes" id="appTimes">
<input name="stopTime1" type="text" id="stopTime1" />
<input name="stopTime12" type="text" id="stopTime12" />
</div>
<input name="checkbox" onclick="boxDisable(appTimes, $(this));" type="checkbox" id="checkbox" />
Doc readyの時点で要素が存在しない場合は、.on
を次のように使用します。
$(document).ready(function(){
$(document).on('change', 'input[type="checkbox"]', function(e){
//do your stuff here
});
});
onclick
属性を使用しないでください。コードが実行しているのは、ユーザーがクリックした後に新しいonclickハンドラーをアタッチすることです。それはおそらくあなたが望むものではありません。
prop
を変更するには、attr
の代わりにdisabled
も使用する必要があります。
イベントをアタッチしたい要素は、ドキュメントの準備ができていない可能性があるので、確実にそこにいる最も近い先祖にアタッチします。
$( function() { // wait for document ready
$( '#parent-div' ).on( 'click', ':checkbox', function( e ) { // attach click event
$( '#appTimes' ).find(':text').prop( 'disabled', $(e.currentTarget).is(':checked') ); // set disabled prop equal to checked property of checkbox
} );
} );
$(function() {
$(checkbox).click(function() {
if ($('#checkbox').is(':checked')) {
$('#appTimes').find('input').attr('disabled', true);
} else {
$('#appTimes').find('input').removeAttr('disabled');
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="appTimes" id="appTimes">
<input name="stopTime1" type="text" id="stopTime1" />
<input name="stopTime12" type="text" id="stopTime12" />
</div>
<input name="checkbox" type="checkbox" id="checkbox" />