0

我正在尝试在我的网站上实现 jquery-bubble-popup 但是我完全卡住了。我正在尝试执行以下操作。

  1. 如果有人单击“报告信息”div,则会弹出与该报告相关的气泡。
  2. 我希望能够在弹出窗口中更改内容并单击提交,这会将数据发布到该服务器。
  3. 如果在弹出窗口之外单击。我希望它简单地关闭。

非常简单的设置,但我正在拉扯我的头发。如果没有出现问题,就无法关闭弹出窗口。

小提琴:http: //jsfiddle.net/rECnm/1/

jQueryBubblePopup: http: //www.maxvergelli.com/jquery-bubble-popup

代码

$(document).ready(function () {
    $('div.emailReportIcon').CreateBubblePopup({
        manageMouseEvents: false
    });
    $('div.emailReportIcon').click(function (event) {
        var button = $(this);
        var email = button.attr("data-email");
        var message = '<div style="padding:10px;width: 250px;"><p><input type="checkbox"> Email me when new reports are ready.</p>' + '<p>Email Address<br /><input type="text" value="' + email + '"></p>' + '<div >' + '<input type="image" name="submit" value="submit"  class="submitButton">' + '</div></div>';
        button.ShowBubblePopup({
            manageMouseEvents: false,
            position: 'bottom',
            align: 'left',
            tail: {
                align: 'left'
            },
            innerHtml: message,
            innerHtmlStyle: {
                color: '#000',
                'text-align': 'left'
            },
            themePath: 'http://www.maxvergelli.com/docs/jquery-bubble-popup-examples/images/jquerybubblepopup-themes',
            alwaysVisible: false,
            closingDelay: 200,
            selectable: true
        });
    });
});
4

1 回答 1

2

http://jsfiddle.net/rECnm/9/

var button = false;
var active = true;
$(document).ready(function () {
    $('div.emailReportIcon').CreateBubblePopup({
        manageMouseEvents: false
    });
    $('div.emailReportIcon').click(function (event) {
        resetActiveBubble();
        button = $(this);
        active = true;
        var email = button.attr("data-email");
        var message = '<div style="padding:10px;width: 250px;"><p><input type="checkbox"> Email me when new reports are ready.</p>' + '<p>Email Address<br /><input type="text" value="' + email + '"></p>' + '<div >' + '<input type="image" name="submit" value="submit"  class="submitButton">' + '</div></div>';
        button.ShowBubblePopup({
            manageMouseEvents: false,
            position: 'bottom',
            align: 'left',
            tail: {
                align: 'left'
            },
            innerHtml: message,
            innerHtmlStyle: {
                color: '#000',
                'text-align': 'left'
            },
            themePath: 'http://www.maxvergelli.com/docs/jquery-bubble-popup-examples/images/jquerybubblepopup-themes',
            alwaysVisible: false,
            closingDelay: 200,
            selectable: true,
            afterShown: function() {
                active = false;
                $(".jquerybubblepopup").bind("mouseenter",function() {
                    active = true;
                }).bind("mouseleave", function() {
                    active = false; 
                });
            }
        });
    });
    $(window).bind('click',function() {
        resetActiveBubble();
    });
});
function resetActiveBubble() {
    if ( button && active == false ) {
        button.RemoveBubblePopup();
        button.CreateBubblePopup({
            manageMouseEvents: false
        });    
    }
}

上面的代码有一个窗口点击监听器,和一个布尔变量来确定气泡是否“活跃”(例如鼠标在气泡上)。

此解决方案不适用于 ipad 等(您将需要触摸侦听器),并且在使用 jsfiddle 播放时,您仍然可以通过在加载过程中单击来关闭气泡;在触发 afterShown 之前,活动状态不会被附加。

我确信它可以被优化(还要注意 jsfiddle 中的 console.logs)。我希望这有帮助。

于 2013-04-26T22:48:02.780 回答