Jquery表单提交行为不可理解
Jquery form submit behavior not understandable
我正在使用js和jquery为一个小的Web项目编写代码。在其中,在某个时候,单击一个按钮,我创建了一个对话框。对话框内有一个表单,其中包含一个名称字段和一些数字字段。我应该检查用户输入并将其发送到服务器,同时将名称字段附加到浏览器中的列表中,对于亲密用户,又添加了一项。两件奇怪的事情正在发生——
1(发布表单后,对话框会自行关闭,而无需我在提交按钮处理程序中的任何位置发出对话框("关闭"(。
2( 名称条目不会附加到列表中。就好像提交后整个页面都会刷新。使用名称列表的原始默认条目。
有人对为什么会发生这种情况有任何想法吗?会发布一些代码以帮助您。请不要建议使用Ajax。我认为这反映了我对JS方式的理解中的一些基本缺陷,并希望首先清除它,而不仅仅是切换到其他技术。
<div id='dialog' title='Define New Matrix'>
<form name='form1' id='form1' method='post'>
<fieldset>
<label for="Name">Name</label>
<input type='text' name='nameofmatrix' id='Name' class='whitepanes'><br>
<label for="a11">a11</label>
<input type="text" name='a11' id='a11' class='whitepanes number-field'><br>
<label for="a22">a22</label>
<input type="text" name='a22' id='a22' class='whitepanes number-field'><br>
<button id='submit_button'>Submit</button>
<button id='cancel_button'>cancel</button>
</fieldset>
</form>
<p id='tip' style='color:red;'><i>All fields are required</i></p>
</div>
<script>
//#button_define is a button on whose clicking the dialog opens.
$('#button_define').click(function(){
$('#dialog').dialog('open');
$('#tip').html("<p style='color:red; font-size:small'>All fields are mandatory</p>");
});
$('#submit_button,#cancel_button').button();
$('#cancel_button').on('click',function(){
$('#dialog').dialog('close');
});
$('#submit_button').click(function(event){
event.preventDefault();
var name=$('input[name=nameofmatrix]').val();
//Validate is a function which returns a bool if validation proceeds correctly
var isCorrect = Validate();
if(isCorrect){
//if validated correctly then add to list
$('#form1').submit();
//$('#dialog').dialog('close');
$('#selectable').append("<li class='ui-widget-content'>",name,"</li>");
}
});
</script>
就好像整个页面在帖子发布后刷新一样。
这正是发生的事情。 虽然我不确定您将 POST 请求提交到哪里,因为您的form
上没有action
属性。 但是,由form
触发的标准非 AJAX 请求会将请求发送到服务器,然后呈现来自服务器的响应。 如果响应再次是同一页面,则将再次呈现同一页面。
JavaScript 在加载此新响应时不会记住上一页的状态。 即使它们是同一页面,它们也是来自服务器的两个独立响应。 所以。。。
1(发布表单后,对话框会自行关闭,而无需我在提交按钮处理程序中的任何位置发出对话框("关闭"(。
对话框未关闭。 页面刷新后,您将处于一个全新的页面上下文中。 它没有关闭,只是在这种情况下还没有打开。
在页面2( 名称条目不会附加到列表中。
加载时,没有任何情况会导致这种情况发生,因此在新页面上下文中不会发生这种情况。 您的服务器端代码需要在对 POST 请求的响应中包含此内容。
我认为这反映了我对JS方式的理解中的一些基本缺陷,并希望首先清除它,而不仅仅是切换到其他技术。
这种误解包括AJAX是JavaScript的一部分。 ("AJAX"中的"J"代表"JavaScript"。 这不是"切换到其他技术"。 它正在利用您已经在使用的技术的功能。 实际上,AJAX 所做的只是在不刷新页面上下文的情况下向服务器发送请求和接收响应。
您没有正确附加name
。连接运算符不是comma
,而是javascript中的一个+
:
$('#selectable').append("<li class='ui-widget-content'>" + name + "</li>");
接下来,表单将刷新,因为您正在使用 $('#form1').submit();
提交表单。如果不希望页面在提交时刷新,请使用 ajax。
- HTML表单提交时未执行外部函数
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 将图像上传ajax与表单提交ajax相结合
- Javascript无法处理表单提交
- 如何在我的情况下禁用表单提交
- 加载后的页面与ajax表单提交不起作用
- angularjs-控制器在表单提交时未调用
- 禁用带有字符白名单的表单提交
- 如何使用Google Analytics跟踪表单提交
- 使用javascript将表单提交到iframe目标中
- e.preventDefault在表单提交时被忽略
- AngularJS JQuery Ajax表单提交等效
- JavaScript表单提交帮助
- PHP表单提交和重定向
- 在另一个可观察量完成后触发第二个表单提交单击
- Jquery表单提交行为不可理解
- jQuery UI 可丢弃的接受条件与表单提交
- JavaScript onchange可将表单提交到不同的位置
- 禁用表单提交可防止发送按钮属性
- 可通过表单提交进行内容编辑