我有一个小问题,我似乎三天内解决不了。我不认为这是代码错误,但我理解变量以及为什么onClick事件不能正常工作
基本上,我有一页,一张表格,里面有很多行。每行都有注释图标,当您单击此图标时,jquery模式会打开一个textarea,然后编写您的注释按submit (在模式上),然后通过ajax发送注释。
除了:
问题是,如果我有10行,并且没有刷新/重新加载页面,如果我一个接一个地打开这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>具有行和注释图标的表,该表触发要显示的模式(onclick)
<table>
<td><i class="title_row_id_1" onClick="open_comment_modal(this)" data-id="1"></i> </td>
<td><i class="title_row_id_2" onClick="open_comment_modal(this)" data-id="2"></i> </td>
<td><i class="title_row_id_3" onClick="open_comment_modal(this)" data-id="3"></i> </td>
<td><i class="title_row_id_4" onClick="open_comment_modal(this)" data-id="4"></i> </td>
<td><i class="title_row_id_5" onClick="open_comment_modal(this)" data-id="5"></i> </td>
</table>一个打开模式的函数,并将提交的内容发送到php文件。
function open_comment_modal(e){
var id = e.dataset.id
// code to display the modal goes here. (has no issues)
$('.btn-primary').click(function(){
var 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('') // no effect
}
});
$("#my-comment").val('') // no effect
})
$("#my-comment").val('') // no effect
}因此,在上面的示例中,在每个注释图标上按下它应该更新id,获取注释并将其发送到db。
但是它所做的就是将所有带有第一个已打开注释的id的注释插入到数据库中。
我已经禁用了缓存,但什么也没有。
发布于 2017-04-18 10:27:38
这仅仅是因为id变量范围问题。您正在将单击处理程序附加到open_comment_modal method中。你不应该这么做。相反,您应该将click处理程序附加到该函数的外侧,并从单击处理程序内的dom数据集中获取id。
https://stackoverflow.com/questions/43469122
复制相似问题