2017-07-28 2 views
0

このコードは2つのことを行うために作成したものです。最初は、チェックボックスがクリックされたときにテーブルレコードを強調表示することです。 2つ目は、ページを更新しても結果を記憶することです。縦に変更する方法<tr>を水平に変更する<tr>

<!doctype html> 
    <html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Untitled Document</title> 
    </head> 

    <body> 
    <style> 
    .highlight-red { 
     background-color: red; 
    }  
    .highlight-green { 
     background-color: green; 
    } 
    .highlight-yellow { 
     background-color: yellow; 
    }  
    </style> 
    <div class="col-lg-10"> 
     <table id="Table" border="1" > 
      <tr class="highlight"> 
      <td><input type="checkbox" name="cb1" id="cb1" value="y" onChange="changeSoma(this, 'red')" /></td> 
      <td>Click me</td> 
      </tr> 
      <tr> 
      <td><input type="checkbox" name="cb2" id="cb2" value="y" onChange="changeSoma(this, 'green')" /></td> 
      <td>Click me</td> 
      </tr> 
      <tr> 
      <td><input type="checkbox" name="cb3" id="cb3" value="y" onChange="changeSoma(this, 'yellow')" /></td> 
      <td>Click me</td> 
      </tr> 
     </table> 
    </div> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script> 

     function changeSoma(data, color){ 
       if(data.checked && color == 'red'){ 
        $(data).parent().parent().addClass("highlight-red"); 
       } 
       else{ 
        $(data).parent().parent().removeClass("highlight-red"); 
       } 
       if(data.checked && color == 'green'){ 
        $(data).parent().parent().addClass("highlight-green"); 
       } 
       else{ 
        $(data).parent().parent().removeClass("highlight-green"); 
       } 
       if(data.checked && color == 'yellow'){ 
        $(data).parent().parent().addClass("highlight-yellow"); 
       } 
       else{ 
        $(data).parent().parent().removeClass("highlight-yellow"); 
       } 
     } 
    </script> 
    <script> 

     var cond = JSON.parse(localStorage.getItem("check")); 
     for(var i in cond) { 
      if(cond[i]) { 
      $("#"+i).attr("checked",true); 
      $("#"+i).parent().parent().addClass("highlight-"+cond[i]); 
      } 
     } 
     function changeSoma(data, color){ 
       var state; 
       if(localStorage.getItem("check") == null) { 
        state = {cb1:0,cb2:0,cb3:0}; 
       } else{ 
        state = JSON.parse(localStorage.getItem("check")); 
       } 

       if(data.checked) { 
        $(data).parent().parent().addClass("highlight-"+color); 
        state[data.id]= color; 
       } else { 
        $(data).parent().parent().removeClass("highlight-"+color); 
        state[data.id]= 0; 
       } 
       localStorage.setItem("check",JSON.stringify(state)); 
     } 
    </script> 
    </body> 
    </html> 

enter image description here

しかし、私が水平になるように3のチェックボックスを必要としています。 trタグを削除すると、1つの色だけが3つすべてのチェックボックスを強調表示し、その他の2つの色は機能しません。以下に示されています。どのように私はこれを変更できますか?誰か私のバグはどこにあるのか教えてください。 enter image description here

+0

一つの '' ? – Weedoze

+0

はい。 1つのテーブル行に多数のテーブルデータを持たせることができます。そうじゃない? – Dushee

+0

申し訳ありませんが、私はあなたがしようとしているものをかなり得ていません。あなたは同じ機能を望んでいて、すべてが一列になっているという意味ですか? –

答えて

2

ちょうどあなたのtrタグにこれを追加します。それを削除する必要はありません。

style="display: inline-block;" 

は上記とほぼ同じこの

<tr style="display: inline-block;"> 
    <td><input type="checkbox" name="cb1" id="cb1" value="y" onChange="changeSoma(this, 'red')" /></td> 
    <td>Click me</td> 
</tr> 
+0

Mr.Jack Movこれは最もクールなオプションです。ありがとうsoooooooo多く – Dushee

+0

良いコールは、それを考えたことがないでしょう。時には最も簡単な解決策は私がhahaと思う最高です –

+0

Dushee、問題ありません。そして、@Weedozeはより短く、より良いjsコードを提供しました。 –

1

function changeSoma(data, color) { 
 
    if (data.checked) 
 
    $(data).parent().addClass(`highlight-${color}`); 
 
    else 
 
    $(data).parent().removeClass(`highlight-${color}`); 
 
}
.highlight-red { 
 
    background-color: red; 
 
} 
 

 
.highlight-green { 
 
    background-color: green; 
 
} 
 

 
.highlight-yellow { 
 
    background-color: yellow; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="col-lg-10"> 
 
    <table id="Table" border="1"> 
 
    <tr class="highlight"> 
 
     <td><input type="checkbox" name="cb1" id="cb1" value="y" onChange="changeSoma(this, 'red')"/></td> 
 
     <td>Click me</td> 
 
     <td><input type="checkbox" name="cb2" id="cb2" value="y" onChange="changeSoma(this, 'green')" /></td> 
 
     <td>Click me</td> 
 
     <td><input type="checkbox" name="cb3" id="cb3" value="y" onChange="changeSoma(this, 'yellow')" /></td> 
 
     <td>Click me</td> 
 
    </tr> 
 
    </table> 
 
</div>

+0

Mr.Weedozeありがとうございます。 – Dushee

1

のように見えますが、あなたは、単一にすべてのあなたの<td>の要素をラップすることができ

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="col-lg-10"> 
    <table id="Table" border="1"> 
     <tr class="highlight"> 
      <td><input type="checkbox" name="cb1" id="cb1" value="y" onChange="changeSoma(this, 'red')" /></td> 
      <td class="red">Click me</td> 
      <td><input type="checkbox" name="cb2" id="cb2" value="y" onChange="changeSoma(this, 'green')" /></td> 
      <td class="green">Click me</td> 
      <td><input type="checkbox" name="cb3" id="cb3" value="y" onChange="changeSoma(this, 'yellow')" /></td> 
      <td class="yellow">Click me</td> 
     </tr> 
    </table> 
</div> 
<script> 
    function changeSoma(data, color) { 
     if (data.checked) 
      $("." + color + "").addClass(`highlight-${color}`); 
     else 
      $("." + color + "").removeClass(`highlight-${color}`); 
    } 
</script> 
+0

@Dusheeチェックボックスも同様に強調したい場合は、 'td'にカラークラスを追加してください –

+1

Mr.Braedenありがとうございます。 Stackoverflowコミュニティは素晴らしいです。今日私は行くことができるたくさんのアプローチを学びました。 – Dushee

1

テキストtdではなく、チェックボックスをターゲットとすべき<tr>だから、それらはすべて一列に表示されます。また、<label>にテキストをラップして、<label>とそれに対応する<input>を識別して、親の<td>要素をスタイルすることもできます。

HTML

<div class="col-lg-10"> 
    <table id="Table" border="1"> 
    <tr class="highlight"> 
     <td> 
      <input type="checkbox" name="cb1" id="cb1" value="y" onChange="changeSoma(this, 'red')" /> 
     </td> 
     <td>Click me</td> 
    </tr> 
    <tr> 
     <td> 
     <input type="checkbox" name="cb2" id="cb2" value="y" onChange="changeSoma(this, 'green')" /> 
     </td> 
     <td>Click me</td> 
    </tr> 
    <tr> 
     <td> 
     <input type="checkbox" name="cb3" id="cb3" value="y" onChange="changeSoma(this, 'yellow')" /> 
     </td> 
     <td>Click me</td> 
    </tr> 
    </table> 
</div> 

JS(あなただけのブロックの場合)6 ``​​と

if (data.checked) { 
    $(data).parent().parent().addClass("highlight-" + color); 
    state[data.id] = color; 
    } else { 
    $(data).parent().parent().removeClass("highlight-" + color); 
    state[data.id] = 0; 
    } 
    localStorage.setItem("check", JSON.stringify(state)); 
} 

Live demo

+0

Mr.Aer0ありがとう、このオプションはうまくいきます – Dushee

関連する問題