为什么我的动态确认框只能工作一次?

时间:2018-01-31 18:23:39

标签: javascript jquery jqxwidgets

我试图创建一个自定义确认UI对话框,它在第一次尝试时完美运行,然后在第二次尝试运行它时,我不再收到我的选择的警报以及窗口没有关闭。这是为什么?我在这里做错了什么我可能忽略了?

以下是有问题的HTML和Javascript:

<input type="button" id="Button" value="Click Me" />

$('#Button').click(function () {
    confirmUI('is OK?', 'confirm', function () {
        alert('click OK');
    }, function () {
        alert('click Cancel');
    });
});


var confirmUI = function (text, title, callbackOkClose, callbackCancelClose) {
    var $dialog = $('<div id="confirm_' + new Date().getTime().toString() + '"></div>');
    $dialog.html('<div>' + title + '</div><div>' + text + '<div style="width:100%;"><input type="button" id="confirmCancel" value="Cancel" style="float:right;" /><input type="button" id="confirmOk" value="OK" style="float:right;margin-right: 10px" /></div></div>');
    $('body').append($dialog);
    var buttonString = '';
    $dialog.jqxWindow({
        minWidth: 300,
        minHeight: 80,
        draggable: true,
        initContent: function () {
            $('#confirmOk').jqxButton({
                template: 'primary'
            });
            $('#confirmCancel').jqxButton({
                template: 'default'
            });
        },
        resizable: false,
        closeButtonAction: 'close',
        isModal: true,
        okButton: $('#confirmOk'),
        cancelButton: $('#confirmCancel')
    });

    $dialog.on('close', function (e) {
        console.log('1');
        if (e.args.dialogResult.OK) { //ok
            if (callbackOkClose) {
                callbackOkClose();
            }
        } else { //cancel or close
            if (callbackCancelClose) {
                callbackCancelClose();
            }
        }
    });
    return $dialog;
};

这是一个jsfiddle:http://jsfiddle.net/v0re8jeu/

1 个答案:

答案 0 :(得分:2)

因为您正在为每个按钮单击创建该对话框,所以$('#confirmOk')之类的内容不再是唯一的,并返回您第一次单击的按钮的选择器。您应该在关闭时从dom中删除它,以便下一个工作:

$dialog.on('close', function (e) {
    console.log('1');
    $dialog.remove();