Запретить выполнение функции дважды - PullRequest
0 голосов
/ 27 июля 2011

Я впервые создаю свою собственную функцию $.fn.testing = function(){....};

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

$('.target').testing("message" : "Hello!");
$('#test .target').testing("message" : "Hello world!");

Функция заставит всплывающее сообщение «сообщение»-до.Поэтому пользователь хочет, чтобы на каждом .target было всплывающее окно с надписью «Hello!».и если у этого .target также есть идентификатор #test, то должно появиться сообщение: «Привет, мир!».Но проблема в том, что теперь в скрипте появится всплывающее окно "Привет!"И "Привет, мир!"когда срабатывает .target#test.

Итак, что я хочу в своей функции, так это чтобы функция видела, вызвана ли уже функция для этого объекта, и если это так, она должна .unbind() предыдущей функции изатем продолжает добавлять функцию.

Как мне этого добиться?Надеюсь, мое объяснение достаточно ясное!

(Пример выше немного упрощен, поэтому, пожалуйста, не комментируйте его использование)

Помощь приветствуется!

Ответы [ 5 ]

2 голосов
/ 27 июля 2011

Вот как я бы это сделал:

var _myFunction = function() {
  alert($(this).data("message"));
};

в плагине сделайте что-то подобное* jsfiddle

1 голос
/ 27 июля 2011

Вы можете сделать:

$('.target#test').testing("message" : "Hello world!");
$('.target:not(#test)').testing("message" : "Hello!");

РЕДАКТИРОВАТЬ - вы имеете в виду что-то вроде этого?

$('.target').testing(function(e){
   if (this.id === 'event'){
        alert('hello world');
   }else{
        alert('hello');
   }
});
0 голосов
/ 27 июля 2011

Не знаю, правильно ли это делать, но я сам понял это.Это было очень легко, просто добавьте $(this).unbind() в начале своей собственной функции.Он удалит все ранее добавленные функции и продолжит добавлять текущую.Я пробовал это раньше, но с дополнительным селектором: $(this).unbind(".testing"), по какой-то причине это не сработало, но теперь оно у меня работает.

Спасибо за ответы и помощь!Действительно ценю это!

0 голосов
/ 27 июля 2011

Насколько я понял: например, у вас есть всплывающее окно для цели, добавленное к целевому элементу, и теперь всплывающее окно является дочерним для цели, или, возможно, вы могли бы реализовать иное. Я хочу сказать, что всякий раз, когда вызывается функция, она проверяет, вставлено ли всплывающее окно в DOM. Если это первое, оно удалит это всплывающее окно, а затем вставит новое с новым сообщением.

Я имею в виду, как ...

    function() {
        //if a pop is present
        $('.popup').remove();

        var msg = $(this).attr('title'); //for example
        var popup = "html containin msg...";
        $(this).append(popup);
    } 
0 голосов
/ 27 июля 2011

Попробуйте это

var $this. msg;
$('.target').each(function(){
  $this = $(this);

  if((#this.attr("id) != "#test") || ($this.find("#test").length == 0))//here check for all the possible ids you want){
      msg = "message" : "Hello world!";  
  }
  else{
      msg = "message" : "Hello!";
  }
  $this.testing(msg);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...