在阻止默认事件后模拟点击的jQuery

时间:2011-09-27 15:57:27

标签: jquery click handler preventdefault

我再次使用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中有一个类似的工作没有问题(现在calles Sencha)我无法让它在jQuery中工作。

由于

0 个答案:

没有答案