Jump to content
  • 0

помогите разобраться с написанием плагинов


dostel1
 Share

Question

1 раз пишу.Подскажите где ошибки


// JavaScript Document
(function($){

$.fn.plug=function(otions){
var options=jQuery.extend({color:'red',background:'blue'},options)
this.each(function(){
function send(){
$('this').css('color',options.color)
}

$(this).bind('click',send)

})
return this

}

})(jQuery)


<script src="jquery.js"></script>
<script src="1.js"></script>
<script>
$('p').plug()

</script>
</head>

<body>
<p>one</p>
<p>two</p>

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

var options=jQuery.extend({color:'red',background:'blue'},options)

Тут неплохо бы проверить, что options - объект, а не строка например.

$(this)

Лучше вынести в отдельную переменную, наверняка в коде будет использоваться не раз. Это существенно ускорит работу плагина.

  • Like 1
Link to comment
Share on other sites

  • 0

1. $('this') - опечатка.

2. $.fn.plug=function(otions){ - опечатка в options

3. Это тестовый пример или вы реально что-то делать пытаетесь? Ибо в вашем случае this.each не нужен даже, можно просто

$.fn.plug=function(otions){
var options=jQuery.extend({color:'red',background:'blue'},options)
$(this).bind('click', function() {
$(this).css('color',options.color);
});
return this;
}

  • Like 1
Link to comment
Share on other sites

  • 0

А, ну тогда поясню. Внутри плагина this - это коллекция, которую вы выбрали селектором, т.е. в вашем случае все P. Если можете работать с коллекцией - цикл делать необязательно. Т.е. bind вполне можно вызвать на коллекцию, он сам разберется уже. А если вам нужно что-то персонально сделать с каждым элементом коллекции (например, поменять текст внутри каждого P) - тогда делаете цикл по всем элементам. jQuery дает простую возможность делать цикл через коллекция.each(функция).

Еще по коду - функцию send можно вынести за цикл, нет нужды в данном случае ее объявлять столько раз, сколько элементов в коллекции.

Ну и замечание по стилистике - крайне рекомендуется использовать внутри плагина подное обращение к jQuery, т.е не $(this) а jQuery(this). Если хочется краткости, то можно в начале плагина написать var $ = jQuery; Это свзязано с тем, что пользователь вашего плагина может отключить короткий синтаксис (это бывает нужно из-за проблем с другими библиотеками).

Link to comment
Share on other sites

  • 0

Еще по коду - функцию send можно вынести за цикл, нет нужды в данном случае ее объявлять столько раз, сколько элементов в коллекции.

Ну и замечание по стилистике - крайне рекомендуется использовать внутри плагина подное обращение к jQuery, т.е не $(this) а jQuery(this). Если хочется краткости, то можно в начале плагина написать var $ = jQuery; Это свзязано с тем, что пользователь вашего плагина может отключить короткий синтаксис (это бывает нужно из-за проблем с другими библиотеками).

Ошибка по циклам полностью понятная .

Я думал данная обертка решает проблемы конфликтов с другими библиотеками.

Edited by dostel1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy