【问题标题】:JQuery Coldfusion Dynamic Sort HyperLink IssueJQuery Coldfusion动态排序超链接问题
【发布时间】:2011-12-19 15:04:06
【问题描述】:

鉴于我正在从事的项目的性质,为了可扩展性,我试图避免使用插件。但是,如果事实证明需要一个插件,我愿意接受建议。

首先,我在我的 jQuery 分页脚本中取得了成功,因为使用“loadLink”类的预定义(在我的 Coldfusion 脚本中)超链接,我能够在新表中每页生成 10 行数据得到处理并显示在 div 标签内。此外,我可以通过单击我想要排序的标题之一来重新排序该分页记录表中的数据。就像页面链接一样,它向 CF 组件发送一个 ajax 调用,该组件以完整的新排序再现表。

一切正常,但我遇到了一个大问题。每次我选择要查看的新记录页面时,我仍然可以执行一种新的数据。但是,当我尝试对任何列进行第二种排序时,脚本会自行重新加载,而不是进行另一个 ajax 调用。本质上,点击功能并没有打开,即使我认为我确实再次打开了它。我知道我遗漏了一些东西,但这是我正在使用的代码:

$(document).ready(function() {
// load the first page of records upon initial load.
$("##mydiv").load("generateInfo.cfc?method=getEmailData", function() {
    $(".sortLink").on("click", function(e) {
        e.preventDefault();
        var recorddata = $(this).attr("href").substring(1); //trim '?' char
        $.ajax({
            type: "GET",
            url: "generateInfo.cfc?method=getEmailData",
            data: recorddata,
            dataType: "html",
            success: function(message) {                            
                $("##mydiv").html(message);
            }
        });
    });
});

$(".loadLink").click(function(e) {
    e.preventDefault();
    var recorddata = $(this).attr("href").substring(1); //trim '?' char
    var curElement = $(this);
    if ($(this).attr("id") != "disabledLink") {
        $.ajax({
            type: "GET",
            url: "generateInfo.cfc?method=getEmailData",
            data: recorddata,
            dataType: "html",
            success: function(message) {
                $('##pageLinks').children('a').each(function () {
                    if ($(this).attr("id") == "disabledLink") {
                        $(this).removeAttr("disabled");
                        $(this).removeAttr("id");
                    }
                });
                curElement.attr("disabled","disabled");
                curElement.attr("id","disabledLink");
                $("##mydiv").html(message);
                $(".sortLink").on("click", function(e) {
                    e.preventDefault();
                    alert($(this).attr("class"));
                    var recorddata = $(this).attr("href").substring(1); //trim '?' char
                    $.ajax({
                        type: "GET",
                        url: "generateInfo.cfc?method=getEmailData",
                        data: recorddata,
                        dataType: "html",
                        success: function(message) {                            
                            $("##mydiv").html(message);
                            $(".sortLink").on("click");
                        }
                    });
                });
            }
        });
    }
});
});

我在这里遗漏了什么,或者我还需要做什么才能让排序以 ajax 格式持续工作?

【问题讨论】:

    标签: jquery ajax dynamic coldfusion


    【解决方案1】:

    我认为您可以通过委派事件来稍微简化代码:

    $(document).ready(function() {
        // cache mydiv location
        var $mydiv = $("##mydiv");
        $mydiv.on("click",".sortLink",function(e){
            e.preventDefault();
            // split on ? instead to avoid an IE issue on dynaimcally created anchors.
            var recorddata = $(this).attr("href").split("?")[1]; //trim '?' char
            $.ajax({
                type: "GET",
                url: "generateInfo.cfc?method=getEmailData",
                data: recorddata,
                dataType: "html",
                success: function(message) {
                    $mydiv.html(message);
                }
            });
        }).on("click",".loadLink",function(e){
            e.preventDefault();
            // split on ? instead to avoid an IE issue on dynaimcally created anchors.
            var recorddata = $(this).attr("href").split("?")[1];
            var curElement = $(this);
            if ($(this).attr("id") != "disabledLink") {
                $.ajax({
                    type: "GET",
                    url: "generateInfo.cfc?method=getEmailData",
                    data: recorddata,
                    dataType: "html",
                    success: function(message) {
                        $('##pageLinks').children('a').each(function() {
                            if ($(this).attr("id") == "disabledLink") {
                                $(this).removeAttr("disabled");
                                $(this).removeAttr("id");
                            }
                        });
                        curElement.attr("disabled", "disabled");
                        curElement.attr("id", "disabledLink");
                        $mydiv.html(message);
                    }
                });
            }
        });
    
        // load the first page of records upon initial load.
        $("##mydiv").load("generateInfo.cfc?method=getEmailData");
    
    });
    

    这将确保您的事件始终绑定在 ajax 构建的 DOM 节点上。

    就我对recorddata 所做的更改而言,在IE 中,如果您在加载后动态添加锚标记,它将包含该位置的完整路径,而不是您给它的路径。因此,如果您将href 设置为?foo=bar,它将是http://mydomain.com?foo=bar

    评论的变化:

    }).on("click",".loadLink",function(e){
    

    变成

    });
    $(".loadLink").on("click",function(e){
    

    【讨论】:

    • 这似乎对我有用,我错过了什么吗? jsfiddle.net/Tentonaxe/3PqpQ
    • 除非我单独添加加载链接点击功能以及您在那里的内容,否则它在分页中不起作用。现在,如果我要使 loadlink 超链接动态更改(即转到第 3 页,重置排序,然后将超链接链接分配给所有剩余页面的新排序),您上面的代码是否会到达那些 loadLink超链接按编码工作?
    • 我假设加载链接在 $mydiv 中,我的假设是错误的吗?这可以解释为什么它们不起作用。如果页面加载后加载链接从未更改,请尝试我将在一分钟内添加到答案中的更改。
    • 我会像您拥有它一样保留它 - 在创建记录表的同一函数中构建分页链接。它确保在整个搜索过程中正确排序和页面偏移。它现在对我有用,很棒的帮助家伙,一如既往!
    • @KevinB 嗯,我一定把它和其他情况混淆了。
    【解决方案2】:

    您为 .sortLink 绑定了两次点击处理程序,两者都将在点击时触发。尝试删除您在 Ajax 成功处理程序中嵌入的绑定调用。

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 2010-09-23
      • 1970-01-01
      • 2014-03-21
      • 2013-11-21
      • 2014-04-18
      相关资源
      最近更新 更多