我一直在搜索互联网(包括SO),我找不到任何可以帮助我解决问题的方法,所以希望我能得到你们的帮助。
基本上,就像标题所说的那样,.submit()不会在IE中触发。所有其他浏览器工作正常,但在IE(目前为止,8,9,10)它只是不会触发提交。
这是视图代码:
<form id="@formId" method="post" enctype="multipart/form-data" action="@Url.Content("/ActivityEvent/SubmitCheckpointApproval")">
<table id="checkpoint-approval" style="width:100%" align="center" class="noBorders">
<tr>
<td style="width: 520px;">
<div>
Please enter any relevant comments:
</div>
<div style="margin: 10px 0;">
<textarea class="wysiwygSimple" rows="4" cols="60" name="comment" id="checkpoint-comment-@(actTplId)"></textarea>
</div>
</td>
<td style="border: 0; padding-top: 30px; text-align: center; width:70px;">
<img alt="key" src="/Content/Images/checkmarkInCircle.png" align="middle" style="width: 100px;
height: 100px;" /><br />
<p style="text-align: left; margin-top: 10px;">
The notes and resources entered here are shared with the student.</p>
</td>
</tr>
<tr>
<td colspan="2" class="ResourcesUploadList">
Suggest some resources:<br />
<div style="float: left;">
<input class="Multi" type="file" name="resourceFiles[]" /></div>
<div style="float: left; margin-left: 10px; font-style: italic;">
(click browse for each file you want to upload)</div>
<div style="clear: both;">
</div>
</td>
</tr>
<tr>
<td style="border: 0; text-align: center; width:600px;" colspan="2">
@if (hasAdminRights)
{
<input type="button" @Html.Raw(btnStyle) class="activityApprove" name="actionApprove" id="actionApprove" value="Tutor Completion Approval" title = "Approves all activities preceding this checkpoint as complete." onclick="Activity.submitCheckpointApproval('@(formId)', '@(ActivityEvent.EVENT_TYPE_APPROVED)',@(actTplId));" />
<input type="button" @Html.Raw(btnStyle) class="activityAttention" name="actionAttention" id="actionAttention" value="Needs Attention" title = "Notifies the student that this project needs additional work prior to completion." onclick="Activity.submitCheckpointApproval('@(formId)', '@(ActivityEvent.EVENT_TYPE_NEEDS_ATTENTION)',@(actTplId));" />
}
<input type="button" @Html.Raw(btnStyle) value="Cancel" title = "Close this." onclick="javascript:$('#checkpoint-approval@(actTplId)').toggle();" />
</td>
</tr>
</table>
</form>
单击按钮时:
Activity = {
submitCheckpointApproval: function (formId, activityEventStatusId, activityTemplateId) {
var resultsDivId = $("#checkpointResults" + activityTemplateId);
Activity.showCheckpointLoading(resultsDivId); //Just shows a spinner for loading
$("#checkpoint-activityEventStatusId-" + activityTemplateId).val(activityEventStatusId);
$("#" + formId).submit(); //PROBLEM IS HERE??
},
...
};
最后,控制器:
[HttpPost]
[ValidateInput(false)]
public ActionResult SubmitCheckpointApproval()
//Save everything in here
}
在IE中调试时,我到了js中的.submit()行,然后从那里运行它。在此之前的一切工作都很好,但随后.submit()来了,它停止做任何事情。没有javascript错误,控制台中没有任何内容,也没有任何问题的迹象。 在所有其他浏览器中,.submit()触发就好了,控制器会进入被调用的方法。
有关为何在IE中发生这种情况的任何想法?我敢肯定以前有人遇到过这个!!请帮忙,我整个下午一直在我的桌子上敲我的头!
谢谢你们!
答案 0 :(得分:17)
我有类似的错误。我的解决方案是:
将JS表单附加到DOM中的div,这样IE知道它就在那里并且可以提交它。
希望有所帮助
答案 1 :(得分:9)
您可能最适合尝试在jQuery中使用$.trigger()
函数。
与您调用.submit()
的方式类似地调用它:
$('#' + formId).trigger('submit');
祝你好运!
同时强>
IE中存在一个错误,如果没有
,表单将无法正确提交 <input type="submit" value="Submit" /> element.
尝试添加一个并用CSS隐藏它。
答案 2 :(得分:4)
您可以在要发送的表单内创建输入提交,并通过Jquery单击按钮。
适用于IE。
例如:
<form id="@formId" method="post" enctype="multipart/form-data" action="@Url.Content("/ActivityEvent/SubmitCheckpointApproval")">
<input type="submit" class="HiddenBtn" />
</form>
和JS:
$(".HiddenBtn").click();
答案 3 :(得分:0)
您能告诉我您正在使用fileupload控件或其隐藏,并且您正在其他按钮控件上触发/调用它吗? 其实我有同样的问题。我的客户希望我们显示一个花哨的按钮作为文件上载控件。所以我们添加了一个按钮和fileupload控件,其可见性为false,在按钮点击时我们触发了fileupload click事件,在jquery的帮助下,我们获取了文件的路径并将其保存在数据库中。除了IE之外,所有浏览器中的一切都工作得很完美,因为表单没有像你解释的那样在IE中提交。在努力工作之后,我们发现解决方案和解决方案是我们展示了fileupload控件并通过设置其位置并将css不透明度应用于0来将其准确放置在按钮顶部。因此,由于不透明度为0,现在文件上传不可见,但是当用户点击花式按钮时,实际上他/她点击了文件上载,因为它放在按钮顶部。 在此解决方案之后,它在每个浏览器中都像魅力一样。希望这也能帮到你。
答案 4 :(得分:0)
您需要将按钮/输入的类型设置为submit
,如下所示:
<button type="submit">Submit</button>
<input type="submit" value="submit">Submit</button>
答案 5 :(得分:0)
我遇到了同样的问题,仅在IE 10和IE 11中。对我来说,解决方案是首先使用以下代码附加表单:
document.documentElement.appendChild(form);
我把那行放在提交功能
之前form.on("submit", function (event) {
event.preventDefault();
...more code
)}
答案 6 :(得分:0)
如果允许我进行街头交流,则IE11的确切问题(至少是我的构建)会导致MS“您永远不知道”。
是的,当您创建这样的表单元素时
var formX = $(document.createElement('form'));
并最终添加一些这样的字段
field1=$("<input type='hidden' id='myid' name='myid' value='whatever' />");
formX.append(field1);
该元素并未真正添加到DOM中,而是保留在某些开发人员炼狱中,等待您最终将其添加到DOM中
$("#formdiv").append(formX);
正如Arturo Igualada上面评论的那样,您可以将其添加到HTML的某个div中,在我的示例中,其ID为 formdiv
最重要的是,即使在将动态表单附加到某些DIV中添加元素后,也不会在DOM中找到该元素。至少如果您使用JQuery,则常规选择器将在加载页面时查找DOM中存在的元素。因此,您将需要使用某种选择来再次遍历DOM以查找新添加的元素。我使用了查找,尽管我猜想使用 .on 也应该可以。
$(document).find(formX).submit();