gpt4 book ai didi

javascript - Jquery 和 Ajax - 在 ajax 请求后无法触发表单提交

转载 作者:行者123 更新时间:2023-12-01 03:06:32 25 4
gpt4 key购买 nike

我有一个带有表单的页面,该页面应该使用 AJAX 将数据保存和加载到文件中。

JavaScript

这是我正在使用的java脚本:

$(document).ready(function(){


$("#saveConfigForm").submit(function (e)
{
e.preventDefault();
var formData = $(this).serialize();
alert(formData);

});

$(".configFile").click(function() {


if (this.text == '' && this.text == 'undefined')
{
return;

}

$.get( "showForm.php", { loadConfig: this.text} )
.done(function( data ) {
$('#configFormContainer').html(data);
});


});

a 标签的 HTML

第二个函数中的 .configFile 类引用 a-Tags 列表。当我单击其中一个时,脚本成功从文件加载内容并显示它。这是上述 a-标签的 html:

<div class="list-group">
<a href="#" class="configFile>config.json</a>
<a href="#" class="configFile>config_1504987517.json</a>

</div>

这部分工作正常:javascript 函数被触发。在 showForm.php 中加载配置文件。它正在使用文件中的内容重建完整的表单。

表单的 HTML

真正不起作用的是提交功能上的触发器。这是表单-html

<form id="saveConfigForm" method="POST">

<a bunch of form elements />

<button name="submit" class="btn btn-success" type="submit" id="saveConfig">Speichern</button>
</form>

有什么问题

那么,现在发生了什么:

当我最初加载页面时,我单击提交按钮并收到警报。此触发器 .submit() 正在工作。

当我单击其中一个 a 标签来加载配置文件时,会加载该文件而无需刷新页面。这个触发器 .click() 也可以工作。

之后:当我单击提交按钮时,页面将被重新加载。触发器 .submit() 不起作用。

在页面“不需要的”重新加载之后,.submit()-trigger 再次工作。

我不知道这里出了什么问题。希望有人能帮忙

干杯

最佳答案

虽然这不是您的全部代码集,但我还是采用了您发布的内容并制作了一个页面。我可以单击任意一个 .configFile 链接,然后单击提交按钮,我就会收到警报。

但是我确实用 " 关闭了 .configFile 元素的两个 class 属性。我不知道这是否有区别。但是,如果不是,那么它是在 ajax 请求之后发生的事情,当然我无法用这段代码模拟。

<html>
<body>
<div class="list-group">
<a href="#" class="configFile">config.json</a> <!-- //added " to end of class attribute -->
<a href="#" class="configFile">config_1504987517.json</a> <!--//added " to end of class attribute -->

</div>

<form id="saveConfigForm" method="POST">

<a bunch of form elements />

<button name="submit" class="btn btn-success" type="submit" id="saveConfig">Speichern</button>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript"></script>

<script>
$(document).ready(function(){
$("#saveConfigForm").submit(function (e)
{
e.preventDefault();
var formData = $(this).serialize();
alert(formData);

});

$(".configFile").click(function() {


if (this.text == '' && this.text == 'undefined')
{
return;

}


if (window.XMLHttpRequest)
{
// AJAX for IE7+, Chrome, Firefox, Safari, Opera
xmlhttp = new XMLHttpRequest();

} else {

// AJAX for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{

$('#configFormContainer').html(xmlhttp.responseText);

}

}

xmlhttp.open("GET","showForm.php?loadConfig=" + this.text, true);
xmlhttp.send();
});
});
</script>
</body>
</html>

我好奇的另一件事是:打开浏览器的开发者控制台并再次粘贴到您的提交 Binder 中:

$("#saveConfigForm").submit(function (e)
{
e.preventDefault();
var formData = $(this).serialize();
alert(formData);
});

如果您的提交在此之后有效,我建议您在呈现新的 html 后再次绑定(bind)点击事件。或者,将事件绑定(bind)到 $(document),例如:

$(document).on('submit', '#saveConfigForm', (e) => {
e.preventDefault();
var formData = $(this).serialize();
alert(formData);
});

最后一点,我不会尝试增加您的代码以帮助解决您遇到的特定问题。正如另一位用户评论的那样,由于您使用的是 jQuery,所以使用 jQuery 函数会更干净。但我不认为这是你问题的一部分。

关于javascript - Jquery 和 Ajax - 在 ajax 请求后无法触发表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46135119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com