javascript - 阻止先前的点击请求

标签 javascript jquery asp.net ajax

我有表格列表,

<table id="<%#DataBinder.Eval(Container.DataItem, "Certificate")%>" class="tbl_evenSearchResultRow" onmouseover="this.className='ResultGridRowSeleted'" onmouseout="this.className='tbl_evenSearchResultRow'" onclick="return SynopsisWindowOpen(this)">

每个我使用下一个功能的onclick:

 function SynopsisWindowOpen(obj) {
var title = $(obj).find("strong[name='title']").html();

var isParentools = 0;
if (window.location.href.indexOf('recent_releases.aspx') > -1)
    isParentools = 1;

var url = "/ratings/Synopsis.aspx?logoonly=1&Certificate=" + obj.id + "&Title=" + encodeURIComponent(title) + "&parentools=" + isParentools;

$("#ratingModal").on("show.bs.modal", function (e) {
    $.ajax({
        url: url,
        cache: false,
        dataType: "html",
        success: function (data) {
            $("#ratingModal").find(".modal-body").html(data);
        }
    });
});
$("#ratingModal").on("hide.bs.modal", function (e) {
    $(this).find(".modal-body").html('');
});
$("#ratingModal").modal('show');

return false;
}

通过url我渲染模态的主体:我从request.query获取证书并根据它渲染主体

LoadSynopsisContent(Request.QueryString["Certificate"], Request.QueryString["parentools"]);

问题:当我第一次单击时 - 一切似乎都很好,在模态主体中第二次单击时,首先渲染第一次单击的主体,然后渲染第二次单击的主体。等等。 不知道问题出在哪里。

首先我使用 jquery load 函数,但后来我更改为禁用缓存的简单 ajax 调用。

最佳答案

将所有事件绑定(bind)移至函数外部,一切都应该正常工作。

因此,这些部分不应该位于函数内部:

$("#ratingModal").on("show.bs.modal", ....);

$("#ratingModal").on("hide.bs.modal", ....);

这是组织代码的一种方法:

var url; //a global variable ... not a good idea though
function SynopsisWindowOpen(obj) {
    ....
    url = .....
}

$(function() {
    $("#ratingModal").on("show.bs.modal", ....);

    $("#ratingModal").on("hide.bs.modal", ....);
});

但是,方法是不使用内联 JavaScript,而是利用 jQuery 的强大功能将结构与行为分开。

更新

您可以将新的 url 存储在模态的 data 属性中,而不是使用全局变量 url。然后,当模式打开时,您可以从那里获取它。

在函数中:

//calculate the url
var url = .....
//store the url in the modal
$('#ratingModal").data('table-url', url);

在模态事件处理程序中:

$("#ratingModal").on("show.bs.modal", function(e) {
    //retrieve the url from the modal
    var url = $(this).data('table-url');
    //use the url
    $.ajax({ url: url, .... }):
});

关于javascript - 阻止先前的点击请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28630514/

相关文章:

javascript - jQuery tablesorter 自定义日期格式

jQuery Drag - 将一个 div 绑定(bind)到可拖动的 div

javascript - jQuery 验证 - 在单击超链接按钮时验证表字段并显示错误消息摘要

c# - 更改数据表列日期格式

asp.net - 如何在asp.net MVC 3 Razor 中创建和EditorFor FileUpload?

javascript - JQuery - 单击,通过重置禁用鼠标悬停

javascript - 如何在整个字符串中将字符串替换为其他字符串

javascript - 如何在运行时评估 Javascript ES6 代码?

c# - 如何检测由现有文件引起的 System.IO.IOException?

javascript - 如何在 React.js 中的按钮上选中/取消选中带有 onClick 事件的复选框?