0

我再次与 jQuery 一起度过了一段美妙的时光,这一次它在调用 .click() 时不太奏效。

这个想法是有一个单例类来查找任何带有 ui-hint-confirm 标记的元素并显示一个确认对话框。如果用户单击“确定”,则单击原始元素,否则对话框将关闭。但是由于代码可以说一千多个单词:

ConfirmDialogManager = function () {
    var _dialogShown = false;
    var ensureDialog = function (target, text) {
        var targetEl = $(target);
        if (!text) {
            text = targetEl.attr('title');
            text = text == null || text == '' ? 'Are you sure?' : text += '?';
        }
        var el = $('div#dlgConfirm');
        if (el.length == 0)
            el = $('<div id="dlgConfirm"></div>');
        el.dialog({
            autoOpen: false,
            modal: true,
            width: 300,
            height: 150,
            minWidth: 200,
            minHeight: 130,
            title: 'Please confirm',
            maxHeight: 500,
            position: 'center',
            open: function () {
                $(this).css({ 'max-height': 500, 'overflow-y': 'auto' });
            },
            buttons: {
                'OK': function (ev) { onConfirm.call(target, ev); },
                'Cancel': function (ev) { onCancel.call(target, ev); }
            }
        });
        el.html(text);
        $('div#dlgConfirm').dialog('open');
    };
    var closeDialog = function () {
        $('div#dlgConfirm').dialog('close');
    };
    var onConfirm = function (ev) {
        closeDialog();
        _dialogShown = true;
        $(this).click();
        _dialogShown = false;
    };
    var onCancel = function (ev) {
        _dialogShown = false;
        closeDialog();
    };
    var onClick = function (ev) {
        if (_dialogShown)
            return true;
        ensureDialog(this, ev.data.text);
        return false;
    };
    return {
        init: function () {
            $('.ui-hint-confirm').click(onClick);
        },
        setConfirm: function (target, text) {
            $(target).click(text, onClick);
        }
    };
} ();

$(document).ready(ConfirmDialogManager.init);

除了在加载时查找 ui-hint-confirm 元素之外,还可以使用 setConfirm 函数手动调用它。

上面代码的问题是 $(this).click() 内部没有发生任何事情我已经验证它通过调试器(Chrome)和警报到达该行。

我也试过 $(this).unbind('click', onClick) 和 $(this).unbind('click') 没有区别。没有错误记录到控制台。

有任何想法吗?谢谢。

更新:根据要求,添加一个 html 元素示例,这将起作用:

必须在常规链接上工作:

<a href="http://stackoverflow.com" class="ui-hint-confirm">Stack Overflow</a>

必须在仅 js 链接上工作:

<a href="#" class="ui-hint-confirm">JS Only</a>

必须在提交按钮上工作:

<input type="submit" value="Submit button" class="ui-hint-confirm" />

必须使用已经附加了一些脚本的说链接:

<a href="http://stackoverflow.com" id="theLink" class="ui-hint-confirm">Stack Overflow</a>
$('#theLink').click(function () { alert('Now going to Stack Overflow'); } );

在最后一个示例中,对话框应显示在警报消息之前。

我有一个类似的东西在 ExtJS(现在称为 Sencha)中没有问题我只是无法让它在 jQuery 中工作。

谢谢

4

0 回答 0