2017-07-28 16 views
0

該代碼產生了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

但我需要三個複選框是水平的。當我刪除tr標籤時,只有一種顏色突出顯示所有三個複選框,其他兩種顏色不起作用。如下所示。我怎樣才能改變這個?任何人都可以解釋我的錯誤在哪裏? enter image description here

+0

一個'' 6''​​? – Weedoze

+0

是的。一個表格行可以有許多表格數據。不是嗎? – 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

先生傑克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

謝謝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(只有你如果塊)

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