2013-05-20 128 views
1

我是一箇中間JS程序員,這是從PHP不同的世界(尤其是當我甚至在PHP的面向對象編程)。jQuery的定義自定義事件

我感興趣的定義jQuery中我自己的事件,我的節目的可能簡化,我將使用一個簡單的例子:

時候你必須在一個表中的記錄行。用戶想要使一行無效。系統設置爲當發生這種情況時,該行淡出並消失。讓我們假設可能有3種方法可以做到這一點:

  1. 打不活動圖標
  2. 與行高亮打
  3. 右鍵單擊並選擇從上下文菜單中無效。

我希望做的是一樣的東西:

$('.datarow').on('rowinactive',function(){ /* etc */ }); 

的三個動作的上述任一種將設置$('#row12345').inactive和事件處理程序會從那裏。我認爲這是你的狀態,關係到國家的動作(或多個)之間的分離有點的。

我希望這是一個簡單的例子開始。任何人都可以提供一些示例代碼?

回答

1
$(function(){ 
    $("input").on('customEvent',function(){ //define a custom event listener 
     $("p").text("hello"); 
    }); 
    $("input").trigger('customEvent'); //call the event listener attached to obj. with name 'customEvent' 
}); 

我舉了一個例子,你可以玩here。你可以exapnd這個想法到自定義事件適用於一specifict $(...)收集多個對象。然後,因爲每個對象可能與用戶不同的交互,可以調用動作appropriatley,即對於輸入您可能會在click觸發customEvent,而另一個時,它的inactive等等

+0

爲什麼downvote? – HennyH

1

沒有標記是有點難以幫助,所以我將舉一個例子,只使用假設的「失活」圖標。

$('.inactive-icon').on('click',function(){ 
    var $row = $(this).closest('.datarow'); 
    $row.fadeOut(500,function(){ 
     $row.trigger('inactive'); // ---> it's that simple! 
    }); 
}); 

$('.datarow').on('inactive',function(){ /* etc */ }); 
5

你可以定義幾乎任何你想要的事件,但這樣的事件將不得不被觸發一些。

$('.datarow').on('rowinactive',function(e, elem){ 
    alert(elem.id + ' is inactive'); 
}); 

$('table tr').on('click', function() { 
    $(this).highlight(); 
    $('.datarow').trigger('rowinactive', this); // passes the element 
}); 

您還可以將任何參數傳遞給觸發函數。

FIDDLE

0

檢查這個Fiddle

$("tr").bind("fadeOut", function(){ /* code */ }); 
$("tr").trigger("fadeOut");