最佳答案
所以我创建了这个 jqueryui 小部件。它创建了一个 div,我可以将错误流转到其中。小部件代码如下:
$.widget('ui.miniErrorLog', {
logStart: "<ul>", // these next 4 elements are actually a bunch more complicated.
logEnd: "</ul>",
errStart: "<li>",
errEnd: "</li>",
content: "",
refs: [],
_create: function() { $(this.element).addClass( "ui-state-error" ).hide(); },
clear: function() {
this.content = "";
for ( var i in this.refs )
$( this.refs[i] ).removeClass( "ui-state-error" );
this.refs = [];
$(this.element).empty().hide();
},
addError: function( msg, ref ) {
this.content += this.errStart + msg + this.errEnd;
if ( ref ) {
if ( ref instanceof Array )
this.refs.concat( ref );
else
this.refs.push( ref );
for ( var i in this.refs )
$( this.refs[i] ).addClass( "ui-state-error" );
}
$(this.element).html( this.logStart + this.content + this.logEnd ).show();
},
hasError: function()
{
if ( this.refs.length )
return true;
return false;
},
});
我可以向其中添加错误消息,以及对将进入错误状态的页面元素的引用。我用它来验证对话框。在“ addError”方法中,我可以传递一个 id,或者一个 id 数组,如下所示:
$( "#registerDialogError" ).miniErrorLog(
'addError',
"Your passwords don't match.",
[ "#registerDialogPassword1", "#registerDialogPassword2" ] );
但是当我传入一个 id 数组时,它就不工作了。问题出在以下几行(我认为) :
if ( ref instanceof Array )
this.refs.concat( ref );
else
this.refs.push( ref );
为什么这个 concat 不能工作。 this.refs 和 ref 都是数组。那么为什么这个 concat 不能工作呢?
奖励: 我在这个小部件中还做了什么蠢事吗? 这是我的第一个。