【问题标题】:jQuery: Delay fadeOut div multiple timesjQuery:多次延迟fadeOut div
【发布时间】:2011-07-12 02:23:05
【问题描述】:

我尝试为内联确认“对话框”编写一些草率的 jQuery 代码。它工作得很好,除了delay() 只为每个#row_ID 运行一次。如果用户在特定时间跨度内没有与之交互,延迟意味着淡出“对话框”。 “取消”链接每次都很好用。

关于我做错了什么有什么想法吗?

这是 JS:

    $("a.i_delete").click(function() {

        var parent = $(this).attr("id");
        var parentRow = "#row_" + parent;
        var inlineConfirm = $('<div id="confirm_' + parent + '" class="inline_c"><a href="#cancel" class="ic_cancel">Cancel, I want to keep it</a><a href="/?id=' + parent + '" class="ic_confirm">Delete</a></div>').hide().fadeIn(500);

        $(parentRow).append(inlineConfirm).delay(3500).queue(function() {
            $("#confirm_" + parent).fadeOut(2000,function() {
                    $("#confirm_" + parent).remove();
                });
        });

            $("a.ic_cancel").click(function() {
                $("#confirm_" + parent).fadeOut(500,function() {
                        $("#confirm_" + parent).remove();
                    });

                return false;
            });

        return false;

    });

这是html:

    <div id="row_XXX" class="l_row">
        Bla bla bla <a href="/?id=XXX" id="XXX" class="i_delete" title="Delete link">Delete</a>
    </div>

【问题讨论】:

    标签: jquery delay fadein fadeout


    【解决方案1】:

    试试这个:

    $(parentRow)
        .append(inlineConfirm)
        .delay(3500)
        .queue(function(next) {
            $("#confirm_" + parent).fadeOut(2000,function() {
                $("#confirm_" + parent).remove();
            });
    
            // make sure the queue will continue by
            // calling next function on the queue
            next();
        });
    

    【讨论】:

    • 我能说什么,Stack Overflow 的用户再次帮助了那些可能不应该使用 www 的人 :)。谢谢你,@Shef!
    【解决方案2】:

    您总是想将 inlineConfirm 标记附加到 parentRow 吗?而是设置父行的 html。每次单击删除时,您都在绑定函数以取消单击事件。请尝试以下代码。

    $("a.i_delete").click(function() {
    
            var parent = $(this).attr("id");
            var parentRow = "#row_" + parent;
            var inlineConfirm = $('<div id="confirm_' + parent + '" class="inline_c"><a href="#cancel" class="ic_cancel">Cancel, I want to keep it</a><a href="/?id=' + parent + '" class="ic_confirm">Delete</a></div>').hide().fadeIn(500);
    
            $(parentRow).html(inlineConfirm);
            setTimeout(function() {
                $("#confirm_" + parent).fadeOut(2000,function() {
                        $("#confirm_" + parent).remove();
                    });
            }, 3500);
    
                $("a.ic_cancel").unbind('click').click(function() {
                    $("#confirm_" + parent).fadeOut(500,function() {
                            $("#confirm_" + parent).remove();
                        });
    
                    return false;
                });
    
            return false;
    
        });
    

    【讨论】:

    • 感谢@ShankarSangoli 的回复。这不是开箱即用的,现在当我单击delete 链接时,它会直接删除#row_XXX
    • 我错过了在 setTimeout 方法中添加时间。现在我已经编辑了我的答案,请检查。
    • 嗯。这就是您的代码发生的情况:cl.ly/1i321l2N3a3V1m371x0u - 这就是应该发生的情况:cl.ly/2r3B341J18112e3k1R2e
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多