但考虑这件事,在我看来,后一个更简洁的方法是让用户定义的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));