2009-08-10 71 views
1

我有這個功能,我想用相同功能的其他3節在同一頁上。重新使用jquery函數?

我試圖把「本」和最親密的,但它不能正常工作。有什麼想法嗎?

我有一個UL與類的「圍堵」我還包裹每個部分到它自己的「子集」的DIV所以它成爲了「父」。

//Sign Up Favorites Function For Clicking 
    $('.popular-list li a').live("click",function() //this will apply to all anchor tags 
     { 
       var stuff = $(this).text(); 
         var hasDuplicate = false; 

     $('ul.contain li').each(function(){ 
     if ($(this).text() === stuff){ 
      hasDuplicate = true; 
      return false; 
     } 
    }); 

    if (hasDuplicate) { 
    $("#error").queue(function() { 
     $(this).fadeIn(500); 
     $(this).html('You Have Already Added '+stuff); 
     $(this).animate({opacity: 1.0}, 2000) 
     $(this).fadeOut(1500); 
     $(this).dequeue(); 
     }); 





     } 
    else {   
     $('ul.contain').append('<li title="Delete '+ stuff + '">'+stuff+'</li>'); 
      } 
    }); 

     //Sign Up Favorites Function For Adding Custom 
     $('a.addnew').live("click",function() //this will apply to all anchor tags 
     { 
         var newstuff = $("#create-new-drink").val(); 
         var hasDuplicate = false; 

     $('ul.contain li').each(function(){ 
     if ($(this).text() === newstuff){ 
      hasDuplicate = true; 
      return false; 
     } 
    }); 

    if (hasDuplicate) { 
     $("#error").queue(function() { 
     $(this).fadeIn(500); 
     $(this).html('You Have Already Added '+newstuff); 
     $(this).animate({opacity: 1.0}, 2000) 
     $(this).fadeOut(1500); 
     $(this).dequeue(); 
     }); 
    } 
      else if(newstuff === '') { $("#error").queue(function() { 
      $(this).fadeIn(500); 
      $(this).html('The Box is Empty'); 
      $(this).animate({opacity: 1.0}, 2000) 
      $(this).fadeOut(1500); 
      $(this).dequeue(); 
      }); 
    } 
     else {   
      $('ul.contain').append('<li title="Delete '+ newstuff + '">'+newstuff+'</li>'); 
     } 
    }); 




    //Remove an Item 
    $("ul.contain li").live('click', function(ev) { 
     ev.preventDefault(); 
     $(this).fadeOut(500, function(ev) { 
      $(this).remove(); 
     }); 
    }); 

這是相匹配的HTML:

<div class="subStep"> 
    <h3>Section Headline</h3> 

    <ul class="contain"> 
    <span id="error" class="notice"></span> 
    </ul> 




    <ul class="popular-list"> 
    <h4>Headline</h4> 
    <li><a href="javascript:;">Dummy Text</a></li> 

    </ul> 
    <p class="create-entry">Add Your Own: <input type="text" name="createnew" value="" id="create-new" title="" /><a href="javascript:;" class="addnew button">Add New</a></p> 
    </div> 

回答

1

您可以來包裝整體功能作爲一種通用的功能,並傳遞一個參數。

例如:

function DoStuff(selector) { //do stuff } 

$(".yourClass").click(function(){ 
    DoStuff(this); 
}); 
+0

由於這種方法的偉大工程! 。 – matthewb 2009-08-11 13:39:42

+0

很高興我能幫助:) – Jason 2009-08-11 17:18:54

+0

你也可以只通過'$(」。yourClass')點擊(DoStuff);'和'訪問從this'的‘可重複使用的功能’ – gnarf 2009-08-17 10:28:03

2

在您選擇請記住,您可以使用「」來一個處理程序附加多種類型元素,例如:

$("a, div.heading, p").click(function() { 
    // this click event will fire for all anchors, 
    // paragraphs and divs with the class "heading" 
}); 
+0

這個方法不起作用,只是它的兩個景點都是一樣的。 – matthewb 2009-08-10 20:17:07

0

你可以讓你自己的函數(函數DoSomething的(){/ 代碼 /}),幷包括它,例如:

$("#something").click(DoSomething); 

如果你需要有一些變化(我看到文本的變化),你可以這樣做:

function DoSomething() { 
    $("#div").html(text); 
    /* do something else */ 
} 

var text = 'Hey I am a text!'; 
$("#something").click(DoSomething);