$.submit表单和replace div使用ajax在新的partialview上具有奇怪的jquery行为
我认为问题在于jQuery,我不确定 让我解释一下情况 截图1 我填写partialView并单击submit submit是一个jQuery事件处理程序,其代码如下: _CreateOrEdit.cshtml$.submit表单和replace div使用ajax在新的partialview上具有奇怪的jquery行为,ajax,asp.net-mvc-3,jquery,Ajax,Asp.net Mvc 3,Jquery,我认为问题在于jQuery,我不确定 让我解释一下情况 截图1 我填写partialView并单击submit submit是一个jQuery事件处理程序,其代码如下: _CreateOrEdit.cshtml <script type="text/javascript"> $(document).ready(function () { $('input[type=text], input[type=password], input[type=url], input[typ
<script type="text/javascript">
$(document).ready(function () {
$('input[type=text], input[type=password], input[type=url], input[type=email], input[type=number], textarea', '.form').iTextClear();
$("input:checkbox,input:radio,select,input:file").uniform();
$("input[type=date]").dateinput();
});
$(window).bind('drilldown', function () {
$(".tabs > ul").tabs("section > section");
});
$("#CreateOrEditSubmit").submit(function () {
//get the form
var f = $("#CreateOrEditSubmit");
//get the action
var action = f.attr("action");
//get the serialized data
var serializedForm = f.serialize();
$.post(action, serializedForm, function (data) {
$("#main-content").html(data);
});
return false;
});
</script>
然后,它尝试再次重新显示相同的表单(控制器客户端、动作创建),但某些内容没有正确触发(屏幕截图2)。布局错误(按钮仍然隐藏),选项卡不工作(javascript)
最糟糕的是,我在Firebug、Chrome控制台中没有发现任何错误
有没有人知道问题出在哪里,因为我真的不知道发生了什么。在我看来,一切都没有改变,但它确实改变了
仅供参考,post功能的等效值为:
var request = $.ajax({
type: 'POST',
url: action,
data: serializedForm,
success: function (data) {
$("#main-content").html(data);
},
dataType: 'HTML'
});
request.done(function (msg) {
$("#log").html(msg);
});
request.fail(function (jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});
提交前,一切正常
提交后,调用相同的表单。jQuery不再工作了,表单也被阻塞了(我认为这是jQuery崩溃的“副”行为)
编辑:(根据要求)
这是完整的局部视图
_CreateOrEdit.cshtml目前不包含任何javascript,结果是一样的,所以我只发布了Create.cshtml
Create.shtml
@model BillingSoftwareOnline.Domain.Entities.Client
<div class="container_12 clearfix leading">
<div class="grid_12">
@using (Html.BeginForm("Create", "Client", FormMethod.Post, new { @class="form has-validation", id="CreateOrEditSubmit"}))
{
@Html.Partial("_CreateOrEdit", Model)
<div class="form-action clearfix">
<button class="button" type="submit">
OK</button>
<button class="button" type="reset">
Reset</button>
</div>
}
</div>
</div>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.itextclear.js")"> </script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.uniform.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery.tools.min.js")"> </script>
<script type="text/javascript">
$(document).ready(function () {
$('input[type=text], input[type=password], input[type=url], input[type=email], input[type=number], textarea', '.form').iTextClear();
$("input:checkbox,input:radio,select,input:file").uniform();
$("input[type=date]").dateinput();
});
$(window).bind('drilldown', function () {
$(".tabs > ul").tabs("section > section");
});
$("#CreateOrEditSubmit").submit(function () {
//get the form
var f = $("#CreateOrEditSubmit");
//get the action
var action = f.attr("action");
//get the serialized data
var serializedForm = f.serialize();
// $.post(action, serializedForm, function (data) {
// $("#main-content").html(data);
// });
var request = $.ajax({
type: 'POST',
url: action,
data: serializedForm,
success: function (data) {
$("#main-content").html(data);
},
dataType: 'HTML'
});
return false;
request.done(function (msg) {
alert(msg);
});
request.fail(function (jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});
});
</script>
@model BillingSoftwareOnline.Domain.Entities.Client
@使用(Html.BeginForm(“Create”,“Client”,FormMethod.Post,new{@class=“form has validation”,id=“CreateOrEditSubmit”}))
{
@Html.Partial(“_CreateOrEdit”,Model)
好啊
重置
}
$(文档).ready(函数(){
$('input[type=text]、input[type=password]、input[type=url]、input[type=email]、input[type=number]、textarea'、'.form').iTextClear();
$(“输入:复选框,输入:收音机,选择,输入:文件”).uniform();
$(“输入[类型=日期]”).dateinput();
});
$(窗口).bind('drilldown',函数(){
$(“.tabs>ul”).tabs(“节>节”);
});
$(“#CreateOrEditSubmit”).submit(函数(){
//拿到表格
变量f=$(“#CreateOreEdit提交”);
//采取行动
var action=f.attr(“action”);
//获取序列化数据
var serializedForm=f.serialize();
//$.post(操作、序列化格式、函数(数据){
//$(“#主要内容”).html(数据);
// });
var请求=$.ajax({
键入:“POST”,
url:action,
数据:序列化格式,
成功:功能(数据){
$(“#主要内容”).html(数据);
},
数据类型:“HTML”
});
返回false;
request.done(函数(msg){
警报(msg);
});
请求失败(函数(jqXHR,textStatus){
警报(“请求失败:+textStatus”);
});
});
由于此标记作为部分返回,因此需要重新初始化javascript
这是一个很难理解的问题,但是试着把你的脚本放在部分视图中,而不是_CreateOrEdit.cshtml,看看这是否有效
更新
看到cshtml后,它看起来好像不工作了,因为在ajax加载之前,已经执行了$(document).ready()。请尝试以下方法:
$(function () {
$('input[type=text], input[type=password], input[type=url], input[type=email], input[type=number], textarea', '.form').iTextClear();
$("input:checkbox,input:radio,select,input:file").uniform();
$("input[type=date]").dateinput();
$(window).bind('drilldown', function () {
$(".tabs > ul").tabs("section > section");
});
$("#CreateOrEditSubmit").submit(function () {
//get the form
var f = $("#CreateOrEditSubmit");
//get the action
var action = f.attr("action");
//get the serialized data
var serializedForm = f.serialize();
// $.post(action, serializedForm, function (data) {
// $("#main-content").html(data);
// });
var request = $.ajax({
type: 'POST',
url: action,
data: serializedForm,
success: function (data) {
$("#main-content").html(data);
},
dataType: 'HTML'
});
return false;
request.done(function (msg) {
alert(msg);
});
request.fail(function (jqXHR, textStatus) {
alert("Request failed: " + textStatus);
});
});
});
在ajax回调的末尾添加以下说明,以便在将表单注入DOM后应用样式:
$('input[type=text], input[type=password], input[type=url], input[type=email], input[type=number], textarea', '.form').iTextClear();
$("input:checkbox,input:radio,select,input:file").uniform();
$("input[type=date]").dateinput();
$(".tabs > ul").tabs("section > section");
我的所有javascript文件都在我的partialview中引用,但似乎没有帮助。这是因为submit按钮:(顺便说一句,我把它放在了_CreateOrEdit.cshtml中,这样就可以对这两个文件都进行初始化了(“partialview”是在服务器端呈现的,而不是在客户端)。感谢您的尝试,虽然这似乎没有什么帮助,但请将代码放在partialview中,然后在_layout.cshtml中尝试(当然)抱歉,我错过了你的一些js。请看更新的答案,试一试。工作正常。太棒了。谢谢你的麻烦了!你能为Submit上加载的部分视图发布cshtml标记,包括脚本吗?完成,这是屏幕截图下面的代码。我从_createoredit.cshtml中删除了所有javascript,并将其放在create.cshtml中。结果是same(检查屏幕;-)工作正常。令人惊叹的。谢谢!
$('input[type=text], input[type=password], input[type=url], input[type=email], input[type=number], textarea', '.form').iTextClear();
$("input:checkbox,input:radio,select,input:file").uniform();
$("input[type=date]").dateinput();
$(".tabs > ul").tabs("section > section");