Причина, по которой $(this).attr("id")
не определен в показанном вами коде, заключается в том, что в этот момент this
не имеет ничего общего с вашим селектором jQuery "form textarea.count-chars", поэтому this
равно , а не текущий элемент обрабатывается.$(this).attr("id")
(вместе с остальным литералом этого объекта) оценивается первым, и результат передается вашему плагину.
Если вам нужно получить какой-либо атрибут для каждого соответствующего элемента, вам нужно сделать это внутри вашего плагина,Или настройте свой плагин так, чтобы он принимал другой параметр, который является функцией обратного вызова, и затем вы можете предоставить функцию для какой-либо обработки отдельных элементов.
Ниже приведен примерный план того, как это сделать:
(function( $ ) {
$.fn.smartInput = function(options) {
this.each(function() {
// get associated div's id via the supplied callback,
// passing the current element to that callback
var associatedDivId = options.callback.call(this,this);
// do something with the id
});
};
})( jQuery );
$(("form textarea.count-chars").smartInput({
maxChars : 128,
callback : function(el) { return $(this).attr("id"); }
});