Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: jQuery - пользовательская функция на обработчик
 
 автор: Sfinks   (22.09.2012 в 22:58)   письмо автору
 
 

Один и тот же код, нужно повесить в разных местах на обработчик click.
Изначально было так:
//<?
$('#some').live('click',function(){
  $(
this)
    .
wait()        // это своя функция, определена выше
    
.load('/some',function(data){
      
// some
    
})
    .
off('click')  // тут обработчик отключается, а позже его нужно в другом месте включить
    
.off('hover');
});


Решил выделить код в функцию.
И выяснил, что чет никак я не разберусь с пространством имен в JS.
Столкнулся с тем, что чтоб передать в функцию вызывающий объект, нужно поизгаляться.
Постоянно что-то оказывается не определенным.
Пару раз даже удалось хром повесить =))
В итоге получилось, но я сомневаюсь, что правильно.
Как-то не в стиле jQuery.
//<?
funcName 
= function(element){
  
element
    
.wait()     
    .
load('/some',function(data){
      
// some
    
})
    .
off('click')
    .
off('hover');
}

$(
'#some').live('click',function(){
  
funcName($(this));
});

$(
'#someOther').live('click',function(){
  
funcName($(this));
});

Подскажите, плиз, как правильнее сделать? Или все ок?

Как-то можно избавиться от function(){funcName($(this));});, чтоб сразу к своей функции обращаться, а не через еще одну безымянную функцию?

  Ответить  
 
 автор: confirm   (23.09.2012 в 09:10)   письмо автору
 
   для: Sfinks   (22.09.2012 в 22:58)
 

О пространстве имен:
$(function() {
   $('div').on('click.main', function(){
      alert(this.id) //сработает для обоих div
   });
   
   $('#d2').on('click.main2', function(){
      alert(this.tagName) //сработает только для второго div
   });
   
  //вызов обработчика передаст в обработчик ссылку на объект источник
  //и только для события пространства main 
  $('#d1').trigger('click.main');
});    
</script>
<div id="d1">Src 1</div>
<div id="d2">Src 2</div>
О this:
$.fn.mainFn = function() {
   alert(this.attr('id'))  
}
  //вызывает функцию с передачей ей объекта источника
  $('#d1').mainFn();
  $('#d2').mainFn();

  Ответить  
 
 автор: fiction   (27.09.2012 в 16:37)   письмо автору
 
   для: Sfinks   (22.09.2012 в 22:58)
 

ИМХО от function(){funcName($(this));}); избавится в данном случае нельзя. Единственное не понятно, зачем вы решили выделять код в функцию? Если нужно использовать его для другого идентификатора пишите $('#some, #someOther')...

  Ответить  
 
 автор: Sfinks   (27.09.2012 в 23:50)   письмо автору
 
   для: fiction   (27.09.2012 в 16:37)
 

Нет после выключения обработчика, он потом снова подключается посреди другой обработки другого элемента, но на этот же изначальный элемент.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования