所以我有一个在for循环中创建的文本框,文本框需要在更改时自动提交表单。我让它在不同的页面中工作,但不是在循环中创建的。我的代码如下:
using (Ajax.BeginForm("ReportInput","Reports",new AjaxOptions() { UpdateTargetId = "refresh", InsertionMode = InsertionMode.Replace }, new { @id = "refresh" }))
{
.......for loop{
//id of textbox <- only one of these textboxs is created at the moment.
var temp = "#InputParameters_" + i +"__Value";
<script type="text/javascript">
$('@temp').change(function () {
$('#refresh').submit();
});
</script>
@Html.TextBoxFor(modelitem => Model.InputParameters[i].Value)
.......}
}
使用firebug时,单击文本框会弹出以下错误。
ReferenceError:对未定义属性jQuery.event.triggered的引用 return event.result; jquery-1.9.1.js(第3091行) ReferenceError:对未定义属性src.returnValue的引用 this.isDefaultPrevented =(src.defaultPrevented || src.returnValue === false | jquery-1.9.1.js(第3345行) 不推荐使用getPreventDefault()。请改用defaultPrevented。 src.getPreventDefault&amp;&amp; src.getPreventDefault())? returnTrue:returnFalse; jquery-1.9.1.js(第3346行) ReferenceError:对未定义属性event.result的引用 return event.result;
生成的HTML:
<form id="refresh" method="post" data-ajax-update="#refresh" data-ajax-mode="replace" data-ajax="true" action="/Reports/ReportInput?Length=7">
<script type="text/javascript">
$('#InputParameters_0__Value').change(function () {
$('#refresh').submit();
});
</script>
<input id="InputParameters_0__Value" type="text" value="" name="InputParameters[0].Value">
我难以理解为什么这不起作用,任何帮助都会受到赞赏。
答案 0 :(得分:1)
我认为更好的方法是将你的javascript块放在for循环之外,考虑到你的所有文本框ID都以相同的单词开头&#34; InputParameters&#34;,这是我的思维解决方案:
1-您将正常生成HTML,只需删除从循环中呈现javascript的部分。
2-在页面的末尾,放置一个类似于以下代码块的代码块
<script type="text/javascript">
$(function(){
$('[id^="InputParameters"]').change(function () {
$('#refresh').submit();
});
})
</script>
此代码应该获取ID为&#34;输入参数&#34;的所有文本框。单词,然后它正常地将处理程序附加到change事件。
这更好,因为无论你最后是否随机添加了字符串,它都会以你的文本框为目标,并且应该按预期工作。
如果这对您有用,或者您仍然需要对此代码进行调整,请告诉我。