我在视图中有这个代码,在一个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引用输入时,我不知道该怎么做。
答案 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('');
}