Ajax 带按钮的调用页面不触发模态 window 带表单变量
Ajax called page with button not triggering modal window with form variable
我在下面的 Ajax
调用中尝试在特定时间间隔获取一些数据
$(document).ready(function() {
x();
function x() {
var FD = new FormData($('form')[0]);
$.ajax({
type: "POST",
url: "qaVtagAjax.php",
processData: false,
contentType: false,
data: FD,
success: function(result) {
$("#inputFieldDisplay").html(result);
}
});
return false;
}
setInterval(x, 5000);
});
$("#assignQaOa").click(function() {
// trigger modal
});
Ajax
调用页面内容qaVtagAjax.php
如下
echo '<form method="post"> <div class="card" style="position: relative; border-color: black; !important ">
<div class="card-body">
<div class="row">
<input type="text" name= "srNum" id="srNum" value = "someValue" hidden>
<div class="col-sm"><button class="btn-primary modalButton" type="submit" name = "assignQaOa" id = "assignQaOa" title="Click to assign to some operator">Assign</button></div>
</div>
</div>
</div>
</form>
<br>';
如您所见,form
中有一个 button
,名为 assignQaOa
。如前所述,我想通过单击此按钮来触发模式 window
$("#assignQaOa").click(function() {
//trigger modal by doing Eg: $('#myModal').modal('show');
alert("Modal window showing");
});
作为第一步,我尝试提醒一些消息。但是当我点击按钮时什么也没有发生。有谁知道为什么会这样?
注意:实际 qaVtagAjax.php
文件有更多 html
和 php 内容。那些工作正常。所以我简化了理解问题的代码。
编辑 1
以下是我使用的来自 bootstrap
的模态代码
<!-- Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<input type="text" id="tagSerial" name="tagSerial" hidden>
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
我还根据建议编辑了如下按钮点击代码。这一次,如果我发出一个简单的警报,它就会起作用。但是模态没有显示
$(document).on("click", "#assignQaOa", function() {
//Alert is working. Eg: alert("some message");
$('#exampleModalCenter').modal('show'); //This is not working
});
编辑 2
一些post建议在文档中输入两次bootstrap.js
的可能性。但就我而言,情况并非如此。我只打了一次,我正在使用如下
<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
有谁知道为什么会这样?正如我在评论中提到的,如果我从模态中删除了 class fade
,那么模态将使用此 $('#exampleModalCenter').modal('show');
代码
显示一瞬间
编辑 3
通过 e.preventDefault()
,我可以停止表单提交并成功显示模态。但是现在我在模式 window 中有一个元素应该从表单提交中获取一些 $_POST
值。在这种情况下,如何在模态中获得 $_POST
值?我的 Javascript
代码如下
$(document).on("click", "#assignQaOa", function(e) {
$('#exampleModalCenter').modal('show');
$('#tagSerial').val($("#srNum").val());
e.preventDefault();
});
下面是模态中的元素window
<input type="text" id="tagSerial">
经过多次尝试和错误后,我发现问题是由于我将 type = submit
用于 button
。当我更改 type = button
时,模态触发并正确显示。但是我还是很纳闷为什么我用了type = submit
去掉了classfade
,模态一瞬间就显示出来了。可能也有解决方法可以正确显示它。我希望stack overflow的一些专家能找出问题并告诉我。
无论如何,我仍然无法将这个 type = button
用于我的方案,因为我需要在单击此按钮时从表单提交中获取值。如果使用 type = button
,我无法通过 $_POST
方法提交和获取表单的值。
编辑 1
得到stack overflow成员@Swati的帮助后,意识到提交会刷新页面,这就是为什么在使用提交时,模态只显示一瞬间。在她的帮助下,我修改了如下代码并解决了我的问题
$(document).on("click", "#assignQaOa", function(e) {
$('#exampleModalCenter').modal('show');
var sr = $(this).closest(".card-body").find("input[name='srNum']").val();
$('#tagSerial').val(sr);
e.preventDefault();
});
以上代码将停止表单提交。它还会抓取输入字段 srNum
值并在模式中显示它,即使没有提交表单。
我在下面的 Ajax
调用中尝试在特定时间间隔获取一些数据
$(document).ready(function() {
x();
function x() {
var FD = new FormData($('form')[0]);
$.ajax({
type: "POST",
url: "qaVtagAjax.php",
processData: false,
contentType: false,
data: FD,
success: function(result) {
$("#inputFieldDisplay").html(result);
}
});
return false;
}
setInterval(x, 5000);
});
$("#assignQaOa").click(function() {
// trigger modal
});
Ajax
调用页面内容qaVtagAjax.php
如下
echo '<form method="post"> <div class="card" style="position: relative; border-color: black; !important ">
<div class="card-body">
<div class="row">
<input type="text" name= "srNum" id="srNum" value = "someValue" hidden>
<div class="col-sm"><button class="btn-primary modalButton" type="submit" name = "assignQaOa" id = "assignQaOa" title="Click to assign to some operator">Assign</button></div>
</div>
</div>
</div>
</form>
<br>';
如您所见,form
中有一个 button
,名为 assignQaOa
。如前所述,我想通过单击此按钮来触发模式 window
$("#assignQaOa").click(function() {
//trigger modal by doing Eg: $('#myModal').modal('show');
alert("Modal window showing");
});
作为第一步,我尝试提醒一些消息。但是当我点击按钮时什么也没有发生。有谁知道为什么会这样?
注意:实际 qaVtagAjax.php
文件有更多 html
和 php 内容。那些工作正常。所以我简化了理解问题的代码。
编辑 1
以下是我使用的来自 bootstrap
<!-- Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<input type="text" id="tagSerial" name="tagSerial" hidden>
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
我还根据建议编辑了如下按钮点击代码。这一次,如果我发出一个简单的警报,它就会起作用。但是模态没有显示
$(document).on("click", "#assignQaOa", function() {
//Alert is working. Eg: alert("some message");
$('#exampleModalCenter').modal('show'); //This is not working
});
编辑 2
一些post建议在文档中输入两次bootstrap.js
的可能性。但就我而言,情况并非如此。我只打了一次,我正在使用如下
<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
有谁知道为什么会这样?正如我在评论中提到的,如果我从模态中删除了 class fade
,那么模态将使用此 $('#exampleModalCenter').modal('show');
代码
编辑 3
通过 e.preventDefault()
,我可以停止表单提交并成功显示模态。但是现在我在模式 window 中有一个元素应该从表单提交中获取一些 $_POST
值。在这种情况下,如何在模态中获得 $_POST
值?我的 Javascript
代码如下
$(document).on("click", "#assignQaOa", function(e) {
$('#exampleModalCenter').modal('show');
$('#tagSerial').val($("#srNum").val());
e.preventDefault();
});
下面是模态中的元素window
<input type="text" id="tagSerial">
经过多次尝试和错误后,我发现问题是由于我将 type = submit
用于 button
。当我更改 type = button
时,模态触发并正确显示。但是我还是很纳闷为什么我用了type = submit
去掉了classfade
,模态一瞬间就显示出来了。可能也有解决方法可以正确显示它。我希望stack overflow的一些专家能找出问题并告诉我。
无论如何,我仍然无法将这个 type = button
用于我的方案,因为我需要在单击此按钮时从表单提交中获取值。如果使用 type = button
,我无法通过 $_POST
方法提交和获取表单的值。
编辑 1
得到stack overflow成员@Swati的帮助后,意识到提交会刷新页面,这就是为什么在使用提交时,模态只显示一瞬间。在她的帮助下,我修改了如下代码并解决了我的问题
$(document).on("click", "#assignQaOa", function(e) {
$('#exampleModalCenter').modal('show');
var sr = $(this).closest(".card-body").find("input[name='srNum']").val();
$('#tagSerial').val(sr);
e.preventDefault();
});
以上代码将停止表单提交。它还会抓取输入字段 srNum
值并在模式中显示它,即使没有提交表单。