Но, подумав об этом, на мой взгляд, более разумным подходом было бы позволить пользователю определить и обратный вызов onSuccess
, а вместо использования. css
позволить пользователю определить два класса для успеха и ошибки чехол и установить их на элемент.
Пример:
(function($) {
$.fn.attach = function(options, isError) {
var opt = $.extend({
onError : function(message) { // Default function for errors
$(this).html('Error: ' + message + '.');
},
onSuccess: function(message) {
$(this).html('Success');
},
errorClass: 'error',
successClass: 'success'
}, options);
// Loop each selection item
this.each(function() {
var method = 'onSuccess',
cssClass = 'successClass';
if(isError) // An error occurred, call opt.onError
{
method = 'onError';
cssClass = 'errorClass';
return true; // End of the current element process
}
opt[method].call(this, 'Message');
$(this).removeClass(cssClass === 'successClass' ? opt.errorClass : opt.successClass)
.addClass(opt[cssClass]);
});
};
})(jQuery);
Обратите внимание, что я также изменяю call($(this),...)
на call(this, ...)
, чтобы обратные вызовы вели себя так же, как традиционные обратные вызовы.
Тем не менее, чтобы ответить на поставленный вопрос: чтобы позволить css
вызвать событие, вы можете обернуть функцию следующим образом:
(function($) {
var orig_css = $.fn.css;
$.fn.css = function() {
var result = orig_css.apply(this, arguments);
if(arguments.length === 2) { // CSS property was set
$(this).trigger('css_changed'); // or whatever event you want to trigger
}
return result;
};
}(jQuery));
DEMO