Javascript jquery/ajax在onClick期间没有更新函数内部的变量,这是一个奇怪的问题
我有一个小问题,似乎三天内都无法解决。我不这么认为 是一个代码错误,但我理解变量以及为什么onClick事件不能正常工作 基本上我有一个页面和一个表格,里面有很多行。每一行都有注释图标,当您单击该图标时,jquery模式将打开一个文本区域,您可以编写您的注释 comment按submit(在模式上)并通过ajax发送评论 一切正常,除了: 问题是,如果我有10行,并且在没有刷新/重新加载页面的情况下,如果我在 一个接一个,提交我的评论,所有评论都插入第一行 这就好像,如果我打开第一个弹出窗口并提交,当我打开第二个弹出窗口时,第一个弹出窗口的内容 正在持续 下面是一个示例代码 这是一个表示模态的简单代码Javascript jquery/ajax在onClick期间没有更新函数内部的变量,这是一个奇怪的问题,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个小问题,似乎三天内都无法解决。我不这么认为 是一个代码错误,但我理解变量以及为什么onClick事件不能正常工作 基本上我有一个页面和一个表格,里面有很多行。每一行都有注释图标,当您单击该图标时,jquery模式将打开一个文本区域,您可以编写您的注释 comment按submit(在模式上)并通过ajax发送评论 一切正常,除了: 问题是,如果我有10行,并且在没有刷新/重新加载页面的情况下,如果我在 一个接一个,提交我的评论,所有评论都插入第一行 这就好像,如果我打开第一个弹出窗口并提
<!-- very minimilized example because the modal has no issues -->
<div class="modal fade" id="comment-viewer">
<input type="comment" name="" id="my-comment">
<input type="button" name="submit" class="btn-primary">
</div>
因此,在上面的例子中,它在每个注释图标上按下它应该更新id,获取注释
并将其发送到db
但它所做的只是将第一条打开的注释id为的所有注释插入数据库
我已禁用缓存,但仍然没有任何内容您需要在弹出窗口关闭时重置字段,并在再次显示模式时使用新值重新填充字段 例如,假设当你关闭弹出窗口时,你的评论框必须像这样清空
$("#comment-viewer").on("hidden.bs.modal", function () {
$('#my-comment').val('');
});
希望您理解这一点。当弹出窗口关闭时,您需要重置字段,并在再次显示模式时使用新值重新填充字段 例如,假设当你关闭弹出窗口时,你的评论框必须像这样清空
$("#comment-viewer").on("hidden.bs.modal", function () {
$('#my-comment').val('');
});
希望您理解这一点。再试一次;)。请尝试更改打开\u注释\u模式(e)
如:
function open_comment_modal(e){
var id = e.dataset.id
// code to display the modal goes here. (has no issues)
$('.btn-primary').off('click');
$('.btn-primary').click(function(){
...
因为每次调用open\u comment\u modal
,都会将另一个单击处理程序附加到.btn primary
,而旧的处理程序仍然存在。因此,在附加新的处理程序之前,必须清除上一个(无效)处理程序。第二次尝试;)。请尝试更改打开\u注释\u模式(e)
如:
function open_comment_modal(e){
var id = e.dataset.id
// code to display the modal goes here. (has no issues)
$('.btn-primary').off('click');
$('.btn-primary').click(function(){
...
因为每次调用
open\u comment\u modal
,都会将另一个单击处理程序附加到.btn primary
,而旧的处理程序仍然存在。因此,在附加新的处理程序之前,必须清除以前的(无效)处理程序。这只是因为id
变量范围问题。您正在open\u comment\u模态方法
中附加单击处理程序。你不应该这样。与此相反,您应该将click处理程序附加到该函数的外侧,并从click处理程序内部的dom数据集中获取id。这仅仅是因为id
变量范围问题。您正在open\u comment\u模态方法
中附加单击处理程序。你不应该这样。相反,您应该将单击处理程序附加到该函数的外侧,并从单击处理程序内部的dom数据集中获取id。打开模式后,您需要重置文本,单击提交按钮后读取文本
这是更新后的代码
var _Id;
var _comment;
function open_comment_modal(e){
_Id = e.dataset.id;
$("#my-comment").val('');
// code to display the modal goes here. (has no issues)
}
$( document ).ready(function() {
$('.btn-primary').click(function(){
_comment = $("#my-comment").val();
var dataString = "id=" + _Id + "&comment=" + _comment
ajaxRequest = jQuery.ajax({
type: "POST",
url: "foo.php",
data: dataString,
success: function(response) {
$("#my-comment").val('');
// code to hide the modal goes here.
}
});
});
});
打开modal后需要重置文本,单击submit按钮后需要读取文本 这是更新后的代码
var _Id;
var _comment;
function open_comment_modal(e){
_Id = e.dataset.id;
$("#my-comment").val('');
// code to display the modal goes here. (has no issues)
}
$( document ).ready(function() {
$('.btn-primary').click(function(){
_comment = $("#my-comment").val();
var dataString = "id=" + _Id + "&comment=" + _comment
ajaxRequest = jQuery.ajax({
type: "POST",
url: "foo.php",
data: dataString,
success: function(response) {
$("#my-comment").val('');
// code to hide the modal goes here.
}
});
});
});
我已经做了所有这些。事实上,我在代码中有4个地方放了“$”(“#我的评论”).val(“”)`在代码中(我会更新我的答案),它不起作用。我已经做了所有这些。事实上,我在代码中放了“$”(“#我的评论”).val(“”)`在4个地方(我会更新我的答案),它不起作用。我只是尝试了一下,但仍然没有效果。与上一次相比没有变化issue@meskerem你把我上面提到的代码改成树了吗?我刚试过,但还是没有效果。与上一次相比没有变化issue@meskerem你有没有把我上面提到的确切代码改成T码?非常感谢。我真不敢相信这是个问题,我这么想你。我不敢相信这就是问题所在