Jadi saya telah membuat widget jqueryui ini. Ini menciptakan div tempat saya dapat mengalirkan kesalahan. Kode widget terlihat seperti ini:
$.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;
},
});
Saya dapat menambahkan pesan kesalahan ke dalamnya, dan referensi ke elemen halaman yang akan dimasukkan ke dalam status kesalahan. Saya menggunakannya untuk memvalidasi dialog. Dalam metode "addError" saya bisa mengirimkan satu id, atau array id, seperti ini:
$( "#registerDialogError" ).miniErrorLog(
'addError',
"Your passwords don't match.",
[ "#registerDialogPassword1", "#registerDialogPassword2" ] );
Tetapi ketika saya mengirimkan array id itu tidak berfungsi. Masalahnya ada di baris berikut (menurut saya):
if ( ref instanceof Array )
this.refs.concat( ref );
else
this.refs.push( ref );
Mengapa concat itu tidak berhasil. this.refs dan ref keduanya adalah array. Jadi mengapa concat tidak berfungsi?
Bonus: apakah saya melakukan hal lain yang bodoh di widget ini? Ini yang pertama bagiku.