Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.09.2011, 03:27
Аспирант
Отправить личное сообщение для kichSman Посмотреть профиль Найти все сообщения от kichSman
 
Регистрация: 16.10.2009
Сообщений: 69

как предотвратить повторное создание функции
Уважаемые форумчане, есть некий код плагина, скрипт в упрощенном варианте представлен ниже.
var $this = $(':text');

function showList(){
	$(document).click( function(e){
		if ( e.target !== $this.get(0) ){ $('ul').hide() };
	});
	
	$('ul').show()
		.children('li').click(function(e){
			e.stopPropagation();
			alert('Selected ME');
		});
}
$this.delegate( 'focusin', showList() );

Так вот, вопрос в следующем, как предотвратить повторное создание функций "Клика" для документа и элементов LI.
Суть в следующем, указанный скрипт прописан в самом плагине, элемент UL очень часто появляется (при фокусе) и исчезает, по этой причине, советы типа: вызвать единожды оба клика за пределами плагина - не вариант.

При существующем коде, тестовое алерт-сообщение выскакивает нарастающим количеством при каждом новом получении фокуса текстовым полем.

Заранее признателен.
Ответить с цитированием
  #2 (permalink)  
Старый 06.09.2011, 08:03
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

var $this = $(':text'),
    assignedEvent = false;
  
function showList(){

    var ul = $('ul').show();

    if ( !assignedEvent ) {

        assignedEvent = true;

        $(document).click( function(e){ 
            if ( e.target !== $this.get(0) ){ $('ul').hide() }; 
        }); 

        ul.children('li').click(function(e){ 
            e.stopPropagation(); 
            alert('Selected ME'); 
        });
    }
} 
$this.delegate( 'focusin', showList() );
Ответить с цитированием
  #3 (permalink)  
Старый 06.09.2011, 10:27
Аспирант
Отправить личное сообщение для kichSman Посмотреть профиль Найти все сообщения от kichSman
 
Регистрация: 16.10.2009
Сообщений: 69

Сообщение от devote Посмотреть сообщение
....
Честно говоря, в моем случае это не очень хороший вариант, в частности, из-за проблемы присвоения assignedEvent
Ответить с цитированием
  #4 (permalink)  
Старый 06.09.2011, 13:49
Профессор
Отправить личное сообщение для nikita.mmf Посмотреть профиль Найти все сообщения от nikita.mmf
 
Регистрация: 01.02.2010
Сообщений: 364

var $this = $(':text');

function showList(){
	$(document).unbind("click.gavnoplugin").bind("click.gavnoplugin", function(e){
		if ( e.target !== $this.get(0) ){ $('ul').hide() };
	});
	
	$('ul').show()
		.children('li').unbind("click.gavnoplugin").bind("click.gavnoplugin", function( e ){
			e.stopPropagation();
			alert('Selected ME');
		});
}
$this.delegate( 'focusin', showList );
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вывести на экран значение функции SELECT MAX(id) Владдд Серверные языки и технологии 3 25.01.2009 16:07
Как избежать наложения текста(выпадающий список)? AlexMak (X)HTML/CSS 2 22.12.2008 10:52
Как проверить существование функции Aderba Общие вопросы Javascript 2 14.11.2008 16:09
форма как в ExtJS 2 magistr_bender Общие вопросы Javascript 0 11.09.2008 16:01
Помогите разобраться в повторным обращении к функции, как её обнулить. AdvoGad Общие вопросы Javascript 0 01.09.2008 11:35