无法使用$(' this')

时间:2017-06-29 20:09:23

标签: jquery ajax asp.net-mvc

我在视图中有这个代码,在一个IEnumberable的foreach循环中:

 @using (Ajax.BeginForm("PoolDelta", "Characters", new AjaxOptions
                                        {
                                            HttpMethod = "Get",
                                            InsertionMode = InsertionMode.Replace,
                                            UpdateTargetId = crName,                                                
                                            OnSuccess = "clearVal()"
                                    }))
                                    {
                                        <form id="@(crName)Form" name="@(crName)Form">
                                            <fieldset>
                                                @Html.Hidden("Id",item.CharacterId)
                                                @Html.Hidden("crNumber", "cr" + item.AssociatedLevel)
                                                @Html.Hidden("poolName", pnameNoSpace)
                                                @Html.Hidden("charName",  item.Character.Name)
                                                @Html.Hidden("crTextBoxName", crName)
                                                <div class="col-sm-8">
                                                    <input type="number" name="poolDelta" id=@pnameNoSpace />
                                                </div>
                                                <div class="col-sm-4">
                                                    <input type="submit" name="crButton" class="btn btn-primary btn-sm" value="Use">
                                                </div>   
                                            </fieldset>
                                        </form>
                                    }

我想为OnSuccess回调做类似的事情:

 clearVal = function () {
    $('this').find('input[name=poolDelta]').val(''); 
        }

然而&#39;这个&#39;没有像我想的那样参考表格。做一些研究here我看到了这个&#39;现在指的是我不熟悉的XHR。 我无法对输入的id进行硬编码,因为这是在动态生成的列表中使用的。我不能把JS推到表格附近,因为它在桌子里面。在表外,我失去了任何c#名称的范围(比如@pnameNoSpace,这是我试图使用的) OnSuccess回调是否有其他方式以某种方式获得它的相关形式?或者给出除id之外的某些属性的最近输入

顺便说一下,其他一切都很完美。 Ajax替换了它的目标,如果我用alert()测试它会触发OnSuccess,一切都很好,除了我想在提交后清除文本输入。我会考虑一个.click()函数,但当我无法通过id引用输入时,我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

问题:在成功回调中,this引用Ajax调用的jqXHR对象,而不是事件处理程序绑定的元素。 Learn more about how this works in JavaScript

解决方案:您可以在发出ajax请求之前将this对象保存在变量中。示例如下:

@using (Ajax.BeginForm("PoolDelta", "Characters", new AjaxOptions
{
    HttpMethod = "Get",
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = crName,                                                
    OnSuccess = clearVal(this)
}))
{
    <form id="@(crName)Form" name="@(crName)Form">
        <fieldset>
            @Html.Hidden("Id",item.CharacterId)
            @Html.Hidden("crNumber", "cr" + item.AssociatedLevel)
            @Html.Hidden("poolName", pnameNoSpace)
            @Html.Hidden("charName",  item.Character.Name)
            @Html.Hidden("crTextBoxName", crName)
            <div class="col-sm-8">
                <input type="number" name="poolDelta" id=@pnameNoSpace />
            </div>
            <div class="col-sm-4">
                <input type="submit" name="crButton" class="btn btn-primary btn-sm" value="Use">
            </div>   
        </fieldset>
    </form>
}

clearVal = function (obj) {
  $(obj).find('input[name=poolDelta]').val(''); 
}