2013-09-10 1 views
1

Использование следующего JQuery:jQuery метод расширения с параметром?

jQuery.fn.extend({ 
    resizelis: function(xWidth) { 
     var mButtons = this.length; 
     var buttonSize = (xWidth/mButtons); 
     return this.each(function() { 
      this.css("width", buttonSize + "px"); 
      this.children("a").css("width", buttonSize + "px"); 
     }); 
    } 
}); 

И я использую метод как так:

var $width = $window.scrolltop() > $("#header_image").outerHeight() ? .92 * $(window).width() : .92 * $(".content").width(); 
$(".menu").children("li").resizelis($width); 

HTML

<ul class="menu"> 
    <li class="current"><a accesskey="1" href="index.html">Home</a></li> 
    <li><a accesskey="2" href="highlights.html">Highlights</a></li> 
    <li><a accesskey="3" href="agenda.html">Agenda</a></li> 
    <li><a accesskey="4" href="tracks.html">Tracks</a></li> 
    <li><a accesskey="5" href="sponsors.html">Sponsors/Exhibits</a></li> 
    <li><a accesskey="6" href="travel.html">Travel</a></li> 
    <li><a accesskey="7" href="register.html">Register</a></li> 
</ul> 

Но это дает мне ошибку. Что я делаю неправильно? Благодарю.

+0

Какая ошибка вы получаете? –

+0

'Uncaught exception: TypeError: '$ (". Menu "). Children (" li "). Resizelis' не является функцией. Это происходит независимо от того, помещаю ли я код внутри' $ (document) .ready() ' или нет. –

+0

- это '$ window' переменная, которую вы ранее объявили? Вы используете его таким образом, когда объявляете '$ width'. Вы имели в виду '$ (window)'? –

ответ

1

При отладке кода, я обнаружил, что в рамках метода расширения используется this вместо $(this), и вы пытаетесь использовать метод CSS с this, который не является объектом JQuery. Попробуйте изменить this к $(this), и попробуйте еще раз:

jQuery.fn.extend({ 
    resizelis: function(xWidth) { 
     var mButtons = this.length; //same as with the jquery object $(this) 
     var buttonSize = (xWidth/mButtons); 
     return $(this).each(function() 
     { 
      $(this).css("width", buttonSize + "px"); 
      $(this).children("a").css("width", buttonSize + "px"); 
     }); 
    } 
}); 

Внутри цикла each, this является HTMLLIElement, использовать метод CSS, используйте $(this).

+0

Хотя это правда, это не решит проблемы OP. OP не может получить доступ к функции ... –

+0

@ Karl-AndréGagnon, да, но это вызывает исключение javascript, нарушая тем самым код и не позволяя ему работать. –

+0

Почему jQuery использует его для использования в качестве примера 'jQuery.fn.extend' чем? в части 'this.each' http://api.jquery.com/jQuery.fn.extend/ –

 Смежные вопросы

  • Нет связанных вопросов^_^