フォームにチェックボックスがあり、通常はデフォルトでオフになっています。今、私はこのチェックボックスのチェックされた状態とチェックされていない状態で2つの別々のアクションを実行したいです。
これは私のチェックボックスです:
<form>
syn<input type="checkbox" name="checkfield" id="g01-01" onchange="doalert(this.id)"/>
</form>
これは私のスクリプトです:
function doalert(id){
if(this.checked) {
alert('checked');
}else{
alert('unchecked');
}
}
それはただ警告されていない!!それを行う最良の方法は何ですか。
JavaScriptを使用してこれを行うことができますが、jQueryは必要ありません。変更した要素を渡して、JavaScriptで処理するだけです。
[〜#〜] html [〜#〜]
<form id="myform">
syn<input type="checkbox" name="checkfield" id="g01-01" onchange="doalert(this)"/>
</form>
[〜#〜] js [〜#〜]
function doalert(checkboxElem) {
if (checkboxElem.checked) {
alert ("hi");
} else {
alert ("bye");
}
}
<form>
syn<input type="checkbox" name="checkfield" id="g01-01" />
</form>
js:
$('#g01-01').on('change',function(){
var _val = $(this).is(':checked') ? 'checked' : 'unchecked';
alert(_val);
});
問題は、リスナーのアタッチ方法です。
<input type="checkbox" ... onchange="doalert(this.id)">
インラインリスナーは、要素をthisとして呼び出される関数に効果的にラップされます。次に、その関数はdoalert関数を呼び出しますが、thisを設定しないため、デフォルトでグローバルオブジェクト(ブラウザーのウィンドウ)になります。
ウィンドウオブジェクトにはcheckedプロパティがないため、this.checked
は常にfalseに解決されます。
this within doalertを要素にしたい場合は、addEventListenerを使用してリスナーをアタッチします。
window.onload = function() {
var input = document.querySelector('#g01-01');
if (input) {
input.addEventListener('change', doalert, false);
}
}
または、インラインリスナーを使用する場合:
<input type="checkbox" ... onchange="doalert.call(this, this.id)">
JQuery
changeイベントを使用してみましたか?
_$("#g01-01").change(function() {
if(this.checked) {
//Do stuff
}
});
_
次に、チェックボックスからonchange="doalert(this.id)"
を削除することもできます:)
編集:
JQuery
を使用しているかどうかはわかりませんが、まだ使用していない場合は、次のスクリプトをページに配置して使用できるようにする必要があります。
_<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
_
JQueryを使用すると、次のようなことができます。
<form id="myform">
syn<input type="checkbox" name="checkfield" id="g01-01" onclick="doalert()"/>
</form>
function doalert() {
if ($("#g01-01").is(":checked")) {
alert ("hi");
} else {
alert ("bye");
}
}
開発者ツールを使用してコードをデバッグすると、this
が入力コントロールではなくウィンドウオブジェクトを参照していることに気付くでしょう。渡されたIDを使用して入力を取得し、checked
値を確認することを検討してください。
function doalert(id){
if(document.getElementById(id).checked) {
alert('checked');
}else{
alert('unchecked');
}
}