为什么单击的表格单元格内的按钮未定义

时间:2014-01-29 09:55:51

标签: javascript asp.net-mvc

我无法解释为什么当我点击表格单元格内的按钮并尝试获取rowID时 - 我看到它未定义

这是我的代码

@model Onion.Web.ViewModels.CategoryViewModel

<script>
    function btnEdit_Click()
    {

            var par = this.parentNode.parentNode;

            alert(par.id);


    }
</script>
<table>
    <tr>
        <td>ID</td>
        <td>Title</td>
        <td>Button</td>
    </tr>
    @foreach (var item in Model.lstCategoryLanguages)
    {
        <tr id='@item.CategoryLanguagesID'>
            <td>@item.Title</td>
            <td>@item.ShortDescription</td>
            <td><input type="button"  value="Edit" onclick='btnEdit_Click()' /></td>
        </tr>
    }
</table>

2 个答案:

答案 0 :(得分:2)

你需要传递你想要引用的元素的函数,然后在函数中使用它。

这对我有用:

<script>
    function btnEdit_Click(elem)
    {

            var par = elem.parentNode.parentNode;

            alert(par.id);


    }
</script>
<table>
    <tr>
        <td>ID</td>
        <td>Title</td>
        <td>Button</td>
    </tr>
    @foreach (var item in Model.lstCategoryLanguages)
    {
        <tr id='@item.CategoryLanguagesID'>
            <td>@item.Title</td>
            <td>@item.ShortDescription</td>
            <td><input type="button"  value="Edit" onclick='btnEdit_Click(this)' /></td>
        </tr>
    }
</table>

答案 1 :(得分:1)

我认为this会返回错误的上下文。

尝试在onclick事件中传递this,并在函数中使用该参数:

onclick='btnEdit_Click(this)'

我认为第二次绑定@item.CategoryLanguagesID并将该函数传递给摆脱静态parentNode.parentNode引用会更好。如果您的结构随时间变化怎么办?你也一定要修改这个功能。