Slyweb
На разработку сайта! Скидки 50%!

Собственный модуль на jQuery

Вы можете задавать любые вопросы по jQuery.

Собственный модуль на jQuery

Сообщение bobroff » 01 дек 2009, 23:43

Здравствуйте.

Вопрос, наверное глупый, но как писать собственный модуль на jQuery? Взял за основу вот этот пример: http://www.rsdn.ru/article/inet/jQuery.xml

Пишу в .php файле:
Код: Выделить всё
...
<script type="text/javascript" src="ingredientsStorage.js"></script>
...

<script type="text/javascript" charset="utf-8">
 $("#ingredients input").click(function(){
       $("#ingredients input").check('on');
    });
</script>


Сам ingredientsStorage.js (в точности, как в примере из ссылки выше)
Код: Выделить всё
jQuery.fn.check = function(mode) {
   // если mode не определен, используем 'on' по умолчанию
   var mode = mode || 'on';
   
   // В функцию неявно передана коллекция выбранных элементов.
   // Поэтому с этой коллекцией можно работать, как с любой другой
   // коллекцией элементов в jQuery
   // В нашем случае мы воспользуемся методом each()
   return this.each(function()
   {
     switch(mode) {
       case 'on':
         this.checked = true;
         break;
       case 'off':
         this.checked = false;
         break;
       case 'toggle':
         this.checked = !this.checked;
         break;
     }
   });
 };


В результате FireBug пишет:
$("#ingredients input").check is not a function
[Break on this error] $("#ingredients input").check('on');\r


P.S.: сайт пишу на Zend Frameword, но это не должно никак влиять на расширение jQuery своим модулем.
bobroff
 
Сообщения: 26
Зарегистрирован: 01 дек 2009, 23:40

Re: Собственный модуль на jQuery

Сообщение admin » 02 дек 2009, 00:28

Добрый вечер. Вы должны привязать новый метод к элементу.
Код: Выделить всё
$(function(){
jQuery.fn.check = function(option) { 
$(".accordion").after("<p>"+option+"</p>");
}
$(".accordion").check("Привет");
});

Код: Выделить всё
<body>
    <div class="accordion"></div>
</body>

Читайте и учите:
http://slyweb.ru/jquery/4.php
http://docs.jquery.com/Plugins/Authoring
admin
Администратор
 
Сообщения: 165
Зарегистрирован: 15 авг 2009, 20:02

Re: Собственный модуль на jQuery

Сообщение bobroff » 02 дек 2009, 00:46

Спасибо, прочитаю
bobroff
 
Сообщения: 26
Зарегистрирован: 01 дек 2009, 23:40

Re: Собственный модуль на jQuery

Сообщение bobroff » 02 дек 2009, 11:08

Все прочитал, попробовал написать код из вашего примера - все равно ошибка. Пишу
Код: Выделить всё
<body>
    <input type="submit" value="Send" id="testclick">
    <div class="accordion"></div>
</body>

<script type="text/javascript" charset="utf-8">
$(document).ready(function(){

$(function(){
         jQuery.fn.check = function(option) {
         $(".accordion").after("<p>"+option+"</p>");
      }
      });

      $("#testclick").click(function(){
         alert('hi');
         $(".accordion").check("Привет");
      })

});
</script>



Все равно ошибка:$(".accordion").check is not a function
[Break on this error] $(".accordion").check("?????????µ??");\r

Если код самой функции выносить в отдельный js файл и его подключать - тоже самое.
bobroff
 
Сообщения: 26
Зарегистрирован: 01 дек 2009, 23:40

Re: Собственный модуль на jQuery

Сообщение admin » 02 дек 2009, 15:30

И мой и Ваш код правилен, вот пример Вашего последнего скрипта http://slyweb.ru/scrip/ . У меня в FF всё работает. Какой у Вас браузер?
admin
Администратор
 
Сообщения: 165
Зарегистрирован: 15 авг 2009, 20:02

Re: Собственный модуль на jQuery

Сообщение bobroff » 02 дек 2009, 16:00

Это кажется бредом, но код заработал после перезагрузки компьютера. Может это как-то связано с кэшем, денвером и т.п.?
bobroff
 
Сообщения: 26
Зарегистрирован: 01 дек 2009, 23:40

Re: Собственный модуль на jQuery

Сообщение admin » 02 дек 2009, 16:28

Скорее всего кэш. :D
admin
Администратор
 
Сообщения: 165
Зарегистрирован: 15 авг 2009, 20:02

Re: Собственный модуль на jQuery

Сообщение bobroff » 02 дек 2009, 18:07

Уже и не знаю на что грешит, думаю скоро сойду ума. Если мой код запихнут в отдельный html файл - все работает. Когда вношу его же в на страницу сайта, который строю на Zend Framework - не работает. Как найти причину...
bobroff
 
Сообщения: 26
Зарегистрирован: 01 дек 2009, 23:40

Re: Собственный модуль на jQuery

Сообщение bobroff » 02 дек 2009, 18:33

Все, надеюсь нашел окончательную причину проблемы. У Zend Framework есть такой плагин Zend Debug, который облегчает разработку сайта. Когда его отключил, все заработало!!! Все силы из меня высосала эта хрень. Теперь вопрос, как работать без таких ошибок при включенном Zend Debug.

Проблемный код:
Код: Выделить всё
<script type="text/javascript" charset="utf-8">
                if (typeof jQuery == "undefined") {
                    var scriptObj = document.createElement("script");
                    scriptObj.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js";
                    scriptObj.type = "text/javascript";
                    var head=document.getElementsByTagName("head")[0];
                    head.insertBefore(scriptObj,head.firstChild);
                }
 
                var ZFDebugLoad = window.onload;
                window.onload = function(){
                    if (ZFDebugLoad) {
                        ZFDebugLoad();
                    }
                    jQuery.noConflict();
                    ZFDebugCollapsed();
                };
 
                function ZFDebugCollapsed() {
                    if (1 == 1) {
                        ZFDebugPanel();
                        jQuery("#ZFDebug_toggler").html("&#187;");
                        return jQuery("#ZFDebug_debug").css("left", "-"+parseInt(jQuery("#ZFDebug_debug").outerWidth()-jQuery("#ZFDebug_toggler").outerWidth()+1)+"px");
                    }
                }
 
                function ZFDebugPanel(name) {
                    jQuery(".ZFDebug_panel").each(function(i){
                        if(jQuery(this).css("display") == "block") {
                            jQuery(this).slideUp();
                        } else {
                            if (jQuery(this).attr("id") == name)
                                jQuery(this).slideDown();
                            else
                                jQuery(this).slideUp();
                        }
                    });
                }
 
                function ZFDebugSlideBar() {
                    if (jQuery("#ZFDebug_debug").position().left > 0) {
                        document.cookie = "ZFDebugCollapsed=1;expires=;path=/";
                        ZFDebugPanel();
                        jQuery("#ZFDebug_toggler").html("&#187;");
                        return jQuery("#ZFDebug_debug").animate({left:"-"+parseInt(jQuery("#ZFDebug_debug").outerWidth()-jQuery("#ZFDebug_toggler").outerWidth()+1)+"px"}, "normal", "swing");
                    } else {
                        document.cookie = "ZFDebugCollapsed=0;expires=;path=/";
                        jQuery("#ZFDebug_toggler").html("&#171;");
                        return jQuery("#ZFDebug_debug").animate({left:"5px"}, "normal", "swing");
                    }
                }
 
                function ZFDebugToggleElement(name, whenHidden, whenVisible){
                    if(jQuery(name).css("display")=="none"){
                        jQuery(whenVisible).show();
                        jQuery(whenHidden).hide();
                    } else {
                        jQuery(whenVisible).hide();
                        jQuery(whenHidden).show();
                    }
                    jQuery(name).slideToggle();
                }
            </script>
bobroff
 
Сообщения: 26
Зарегистрирован: 01 дек 2009, 23:40

Re: Собственный модуль на jQuery

Сообщение bobroff » 02 дек 2009, 18:50

Методом исключения выяснил что проблема вот в этих строках кода
Код: Выделить всё
var ZFDebugLoad = window.onload;
                window.onload = function(){
                    if (ZFDebugLoad) {
                        ZFDebugLoad();
                    }
                    jQuery.noConflict();
                    ZFDebugCollapsed();
                };


Похоже проблема в $(). Надо писать jQuery(). Я прав?
bobroff
 
Сообщения: 26
Зарегистрирован: 01 дек 2009, 23:40

След.

Вернуться в Вопросы по jQuery

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron