阻止了模拟默认事件后单击的jQuery

阻止了模拟默认事件后单击的jQuery,jquery,click,handler,preventdefault,Jquery,Click,Handler,Preventdefault,我又一次在jQuery上玩得很开心了,这次调用它不太管用。单击() 这样做的目的是创建一个singleton类,用于查找任何带有ui提示confirm标记的元素,并显示一个confirm对话框。如果用户单击“确定”,则单击原始元素,否则对话框将关闭。但既然代码可以说上千字: ConfirmDialogManager = function () { var _dialogShown = false; var ensureDialog = function (target, text

我又一次在jQuery上玩得很开心了,这次调用它不太管用。单击()

这样做的目的是创建一个singleton类,用于查找任何带有ui提示confirm标记的元素,并显示一个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);
ConfirmDialogManager=函数(){
var _DialogShowed=false;
var ensureDialog=函数(目标,文本){
var targetEl=$(目标);
如果(!text){
text=targetEl.attr('title');
text=text==null | | text=''你确定吗?':text+='?';
}
变量el=$('div#dlgConfirm');
如果(el.length==0)
el=$('');
对话框({
自动打开:错误,
莫代尔:是的,
宽度:300,
身高:150,
最小宽度:200,
身高:130,
标题:“请确认”,
最大高度:500,
位置:'中间',
打开:函数(){
$(this.css({'max height':500,'overflow-y':'auto'});
},
按钮:{
'OK':函数(ev){onConfirm.call(target,ev);},
“取消”:函数(ev){onCancel.call(目标,ev);}
}
});
html(文本);
$('div#dlgConfirm')。对话框('open');
};
var closeDialog=函数(){
$('div#dlgConfirm')。对话框('close');
};
var onConfirm=功能(ev){
closeDialog();
_DialogShowed=true;
$(此选项)。单击();
_DialogShowed=false;
};
var onCancel=功能(ev){
_DialogShowed=false;
closeDialog();
};
var onClick=功能(ev){
如果(_对话框显示)
返回true;
ensureDialog(此,ev.data.text);
返回false;
};
返回{
init:函数(){
$('.ui提示确认')。单击(onClick);
},
设置确认:功能(目标、文本){
$(目标)。单击(文本,单击);
}
};
} ();
$(document).ready(ConfirmDialogManager.init);
除了查找加载时的ui提示确认元素外,还可以使用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" />

必须使用已附加的脚本处理say链接:

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

$('#theLink')。单击(函数(){alert('Now to Stack Overflow');});
在最后一个示例中,对话框应显示在警报消息之前

我有一个类似的东西在ExtJS(现在称为Sencha)中可以正常工作,但在jQuery中却无法正常工作


谢谢

您能否添加一个示例html元素,让我们可以在jsfiddle.net中使用它。添加了一些样品,这些样品通常会根据要求进行放置。