2014-02-23 60 views
2

我正在使用ASP.NET MVC4和C#的小型Web應用程序。它的用途是創建一個簡單的待辦事項列表。我正在努力的是我有一個在foreach中顯示的任務列表。每個任務都是一個複選框,基本上當複選框被點擊時(即真正的),文本應該通過它。我試圖使用Javascript,但它沒有奏效。這裏是我的代碼:刪除線在foreach中的文本?

@foreach (var item in Model) 
{ 
<tr style="border: 1px solid;"> 
    <td> 
     <input type="checkbox" name="checkbox" onchange="taskDone(@item.Id)" /> 
    </td> 
    <td> 
     <p id="@item.Id">@Html.DisplayFor(modelItem => item.TaskDetails)</p> 
    </td> 
</tr> 
} 

和Javascript:

<script language="javascript" type="text/javascript"> 
function taskDone(id) { 
    var c = document.getElementById(id); 
    if (this.checkbox.checked) { 
     c.className = "strike"; 
    } 
    else { 
     c.className = "nostrike"; 
    } 
} 
</script> 

和CSS的位:

.strike 
{text-decoration: line-through;} 

有人能解釋我要去哪裏錯了。感謝

+0

我認爲你應該做'this.checked'而不是'this.checkbox.checked' – Muctadir

回答

2

問題是(this.checkbox.checked)這並不是指該複選框元素

傳遞複選框ID mychekbox作爲第二放慢參數爲taskDone(),獲得該元素並驗證它是由if(checkBox.checked)檢查與否,

<input id="mychekbox" type="checkbox" name="checkbox" onchange="taskDone(@item.Id, 'mychekbox')" /> 

function taskDone(id, checkBoxId) { 
    var c = document.getElementById(id); 
    var checkBox = document.getElementById(checkBoxId); //getting checkbox 
    if (checkBox.checked) { //validating checked or not 
     c.className = "strike"; 
    } 
    else { 
     c.className = "nostrike"; 
    } 
} 
+0

c是文本元素在哪裏srikethrough ... – archie

+0

@archie請看看udpated答案。 –

+0

蘇曼 - 謝謝!它工作:)所以我不明白我的錯誤 – archie