2015-09-07 24 views
10

フォームにチェックボックスがありますが、これはデフォルトでは通常チェックされていません。今私はこのチェックボックスのチェックされた状態とチェックされていない状態で2つの分離したアクションを実行したいと思っています。htmlフォームのチェックボックスでチェックボックスをオンにした場合とチェックしていない場合のアクションを実行します。

これは私のチェックボックスです:

<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'); 
    } 
} 

それだけでuncheched警告!それを行う最善の方法は何ですか?

+0

をあなたの機能の中で「これ」は何ですか? – Popnoodles

答えて

23

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"); 
    } 
} 

Demo Here

+0

OPがなぜその問題を抱えているのか、そしてあなたの解決策がその問題を解決する理由について、良い答えが説明されます。 – RobG

+0

フォーム上の複数の項目に同じIDを使用する必要があるため、唯一の真の答えはこれでした。 thnaks – shekoufeh

+3

@shekoufehこれはあなたの問題を解決する素晴らしい答えですが、ドキュメント内で同じidを複数回使用することはできないので、他のすべての答えも当てはまることも知っておくべきです。必要な場合は、クラスに変更する必要があります。 –

1
<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); 
}); 
+0

コード専用の回答は好きではありません。特に、OPでタグ付けされていないか、言及されていないライブラリが必要な場合、問題の説明や回答が修正された理由それ。 – RobG

1

変更イベントJQueryを使用してみましたか?

$("#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> 
+0

jQueryには変更イベントがありません。 – RobG

+3

@RobG http://www.w3schools.com/jquery/event_change.asp –

+0

私はこのIDを何度か繰り返して別の目的のために書いていますので、私はこのように扱うことができません。 – shekoufeh

0

開発者ツールを使用しているコードでは、thisは入力オブジェクトではなくウィンドウオブジェクトを参照しています。渡されたIDを使用して入力を取得し、checkedの値をチェックすることを検討してください。

function doalert(id){ 
    if(document.getElementById(id).checked) { 
    alert('checked'); 
    }else{ 
    alert('unchecked'); 
    } 
} 
+1

投稿の編集を検討して、コードのしくみについての説明を追加してくださいそしてそれがなぜ問題を解決するのか。たいていの場合、コードが含まれている(たとえそれが機能しているとしても)回答者は、OPが問題を理解するのに役立たないでしょう。 – Reeno

2

問題は、あなたがリスナーを添付しました方法です:

<input type="checkbox" ... onchange="doalert(this.id)"> 

インラインリスナーが効果的にこのとしての要素で呼び出される関数に包まれています。その関数はdoalert関数を呼び出しますが、そのに設定されていないので、グローバルオブジェクト(ブラウザのウィンドウ)にデフォルト設定されます。

ウィンドウオブジェクトにチェックされたプロパティがないため、this.checkedは常にfalseに解決されます。

あなたが要素であると 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)"> 
関連する問題