2012-03-20 9 views
2

テーブルとチェックボックスに別の問題があります。私は、テーブルセル内のどこかをクリックすると、チェックボックスをチェックできるようにJavaScriptの動作を確認しています。ただし、チェックボックス自体は機能しません。私はこれを1時間以上解決しようとしましたが、どこでも答えを見つけることはできません。ここに私のjavascriptとそれが操作されたHTMLの抜粋である:ここでクリックするとチェックボックスがチェックされません

function tdOnclick(td) { 
    for(var i = 0; i < td.childNodes.length; i++) { 
     if(td.childNodes[i].nodeName == "INPUT") { 
      if(td.childNodes[i].checked) { 
       td.childNodes[i].checked = false; 
       td.style.backgroundColor = "#FAF4E3"; 
      } else { 
       td.childNodes[i].checked = true; 
       td.style.backgroundColor = "#E1E1E1"; 
      } 
     } 
    } 
} 

は、テーブルのHTMLの一部です:

<tr> 
    <td><center>9:00 - 10:00</center></td> 
    <td class="tdata" onclick="tdOnclick(this)"><input type="checkbox" name="free" value="mon09"></td> 
    <td class="tdata" onclick="tdOnclick(this)"><input type="checkbox" name="free" value="tue09"></td> 
    <td class="tdata" onclick="tdOnclick(this)"><input type="checkbox" name="free" value="wed09"></td> 
    <td class="tdata" onclick="tdOnclick(this)"><input type="checkbox" name="free" value="thu09"></td> 
    <td class="tdata" onclick="tdOnclick(this)"><input type="checkbox" name="free" value="fri09"></td> 
</tr> 
+1

:http://jsfiddle.net/NKCTn/ – xthexder

+1

@ Tats_innit - あなたのソリューションは私のためには機能しません(Linux Mint、Chrome) - それはまったく関数を呼び出すようではありません...私は警告http://jsfiddle.net/9tb4W/6/を追加しました。それが起こることができませんでした。 JSをヘッダーに切り替え、バグが再び現れました。http://jsfiddle.net/9tb4W/5/ – FrankieTheKneeMan

+0

ええ、私もjsfiddleでそれを試しました。私はあなたが私が何を意味するかを見ることができるように、これをテストしているところへのリンクを投稿します。 http://cs1.ucc.ie/~od1/project_css/ –

答えて

2

は実は、私は推測をハザードつもりですそれは働いている。あなたのクリックはチェックボックスにチェックされているので、onClickイベントはチェックを外しています。ここでアイデアです:

<input type="checkbox" name="free" value="mon09" onClick="this.checked=!this.checked;"> 

それは少し汚いですが、それはsucessfullyクリックを無視します。

作業TinkerBin

+0

これは私のために働いた、ありがとう。これは私の "ダブルチェック"問題を解消することができますか? –

+0

@OisínDorgan - 技術的には、それは実際のクリックから3つのチェック - 1つのスイッチ、チェックボックスのonClickからのスイッチ、およびtdのonClickからのスイッチにエスカレートします。私が言ったように、それは汚いですが、私はそれが別の方法で動作させる方法を理解できませんでした。 – FrankieTheKneeMan

+1

これは、これらのチェックされた値をJavaプログラムに渡してデータベースに格納するのに影響しますか?私はそれが想像できませんか?もしそうでなければ、私はトリプルクリックを気にしない。 –

1

私が殴られた男だった場合は、二重のクリックイベントが発生していると思います。 1つは入力用、もう1つは親用です。基本的に2回クリックするだけで、入力を効果的に無効にできます。このpostを読んでください。 このような確率はうまくいくでしょう。

<input type="checkbox" name="free" value="fri09" onclick="return false;" /> 
+0

ティンカービンで試してみました。 no dice - 変更はonClickイベントの前に発生します。 – FrankieTheKneeMan

1

あなたのクリックは予想通り、その後、TDクリックコードを使用すると、バックオフあなたのチェックボックスを切り替えていると呼ばれているチェックボックスをチェックしています。

ここには何が起こっているのかを示すコメントがあるjsfiddleがあります。 http://jsfiddle.net/NujXv/2/

イベントがチェックボックスからTDにバブリングするのを止める必要があります。私はこれがjquery関数 - http://api.jquery.com/event.stopPropagationを探しているのを発見しました。 jsfiddleにはコメントアウトされた行がありますが、本当のjqueryエクスペリエンスを持っていますので少し調整する必要があります。私は同じ問題にした

+0

ありがとうございました!あなたは私の問題を解決しました。チェックボックスのクリックイベントにevent.stopPropagation()を追加すると、チェックが完全に機能します(モーダル:D)。 –

0

:が存在は前のpreventDefaultであれば、どこか「でpreventDefault」を呼び出して、チェックボックスのクリック機能をかどうかをチェックされている場合

チェックがtrueを返すと。

私はこのような何かでそれを解決する:私はもともとjsfiddleでこれを再現するいくつかの問題を抱えて、ので、ここで「作業」のリンクありました

$("#recordlist").click(function(e) { 
    if (e.target.name == 'recordlistitem'){ // When recordlistitem is a checkbox(es) 
     return true; 
    } 
    e.preventDefault(); 
    // other stuff here 
} 
関連する問題