2013-02-12 12 views
4

Нашел хороший Jquery всплывающей функцию здесь:Уменьшения дублированного кода с помощью функции JQuery

JAVASCRIPT 
$(function() { 
    $("#word1234").live('click', function(event) { 
     $(this).addClass("selected").parent().append(' 
      <div class="messagepop pop">"Lorem ipsum dolor sit amet, 
      consectetur adipisicing elit, sed do eiusmod tempor incididunt</div>'); 
     $(".pop").slideFadeToggle() 
     $("#email").focus(); 
     return false; 
    }); 
    $(".close").live('click', function() { 
     $(".pop").slideFadeToggle(); 
     $("#contact").removeClass("selected"); 
     return false; 
    }); 


HTML 
<a href='/word1234' id='word1234'>Supercalifragilisticexpialidocious</a> 

Есть ли более эффективный способ вызова этого всплывающего окна? Если у меня есть сотни определений на странице, я бы повторял много кода, казалось бы, излишне.

Если бы я делал это в родной JS, я бы просто установить функцию OnClick к HREF тега, что-то вроде

<a href="#" id="word1234" onClick="doPop(this, 'Lorem ipsum, ect.')">Supercalifragilisticexpialidocious</a> 

Есть ли подобный метод вызова функции в JQuery?

EDIT После некоторой отладки, рабочий вариант обновленного/фиксированного сценария можно найти здесь: http://jsfiddle.net/N4QCZ/13/ HTH.

+0

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

+0

Как вы определяете связь между всплывающим контентом и элементом? –

+0

В моих собственных всплывающих библиотеках одним из способов добавления всплывающего окна является наличие атрибута: ''. It's easy with jQuery to select elements with the attribute : '$('[bubble]')'. –

ответ

2

Вы можете превратить код в jQuery Plugin, как это:

$.fn.myPopup = function(popupText){ 
    var popupHtml = '<div class="messagepop pop">' + popupText + '</div>'; 
    this.each(function(){ 
     $(this).click(function(){ 

      // Create the popup 
      $(this).addClass("selected").parent().append(popupHtml); 

      // Find the close button and attach click handler 
      $(this).find(".close").click(
       // Find, hide, then delete the popup 
       $(this).closest(".pop").slideFadeToggle().remove();; 
      ); 

     }); 
     return false; 
    }); 

    return this; 
}; 

Тогда ваш код будет выглядеть следующим образом:

$("#word1234").myPopup("Lorem Ipsum"); 
$("#wordABCD").myPopup("Hello World"); 
+0

Всплывающий текст будет идентичным для всех слов: «Lorem ipsum». –

+0

Я позволил сделать это в JQuery? $ ("# word1234"). myPopup ('Lorem ipsump, ect'); если такая проблема решена. –

+0

Да, вы можете это сделать. Я обновил код, чтобы отразить это. – KevSheedy

1

Не используйте live использования on, живой было нежелателен 1,7:

Вы могли бы дать вашим ссылкам всплывающего класс и сделать:

$(".popup").on("click", function() { 
    // Your code 
}); 

Таким образом, вы можете захватить все ссылки с popup класса и не являются обязательными к о событиях, то есть 100:

$("#id1").click() { } 
$("#id2").click() { } 

т.д.

+0

This makes sense, but I need the id for removeClass(). –

+0

Could do the same with the word definition? Supercali Является ли Jquery достаточно умным, чтобы нарисовать ассоциацию в том же элементе? –

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