您可以创建自己的模式,而不是使用 JavaScript 模式。您可以使用 jQuery UI 对话框,但这并不难。
此外,您绑定到所有这些不同类型的事件这一事实可能会导致其中一些事件不恰当地触发多次。您可以使用简单的数据标志检查您是否已经在警告用户的过程中。
$('#email').bind('DOMAttrModified textInput input change keypress paste', function (e) {
var $this = $(this);
if ($this.val().match(/[\s]/g) && !$this.data('spacedout')) {
$this.data('spacedout', true);
$("<div>").appendTo("body").css({
position: 'fixed',
width: '100%',
height: '100%',
backgroundColor: 'black',
opacity: '0.7',
top: 0,
left: 0
}).append($("<div style='color: red;'>Spaces not allowed<br><input type=submit value=OK></div>").on('click', function () {
$this.data('spacedout', false).trigger('focus');
$(this).parent().remove();
}));
$this.trigger('blur');
}
});
http://jsfiddle.net/ExplosionPIlls/HwYdF/