【问题标题】:strikethrough text in a foreach?foreach中的删除线文本?
【发布时间】:2014-03-24 22:38:48
【问题描述】:

我将 ASP.NET MVC4 和 C# 用于小型 Web 应用程序。它的用途是创建一个简单的待办事项列表。我正在努力解决的是我在 foreach 中显示了一个任务列表。每个任务都有一个复选框,基本上当单击复选框时(即为真),文本应该有一个删除线。我尝试使用 Javascript,但它不起作用。这是我的代码:

@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;}

有人可以解释我哪里出错了。谢谢

【问题讨论】:

  • 我认为你应该使用this.checked 而不是this.checkbox.checked

标签: c# javascript asp.net-mvc-4


【解决方案1】:

问题是(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";
    }
}

【讨论】:

  • @archie 请看一下更新的答案。
  • 苏曼 - 谢谢!它起作用了:)所以我不明白我的错误
  • this.checkbox 没有引用您想要的复选框。
猜你喜欢
  • 2020-12-28
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 2020-03-21
  • 1970-01-01
相关资源
最近更新 更多