Vì vậy, tôi đã tạo tiện ích jqueryui này. Nó tạo ra một div mà tôi có thể truyền lỗi vào. Mã tiện ích trông giống như sau:
$.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;
},
});
Tôi có thể thêm thông báo lỗi vào đó và các tham chiếu đến các phần tử trang sẽ được đưa vào trạng thái lỗi. Tôi sử dụng nó để xác thực các hộp thoại. Trong phương thức "addError", tôi có thể chuyển vào một id duy nhất hoặc một mảng id, như sau:
$( "#registerDialogError" ).miniErrorLog(
'addError',
"Your passwords don't match.",
[ "#registerDialogPassword1", "#registerDialogPassword2" ] );
Nhưng khi tôi truyền vào một mảng id, nó không hoạt động. Vấn đề là ở những dòng sau (tôi nghĩ):
if ( ref instanceof Array )
this.refs.concat( ref );
else
this.refs.push( ref );
Tại sao concat đó không hoạt động. this.refs và ref đều là mảng. Vậy tại sao concat không hoạt động?
Phần thưởng: tôi có đang làm gì khác ngu ngốc trong tiện ích này không? Đây là cái đầu tiên của tôi.