2013-05-04 15 views
0

想象一下,jQuery插件向頁面插入元素(例如圖像),並且圖像具有Click事件的事件處理程序。例如,當我點擊圖像打開一個彈出div。強制運行自定義函數以運行元素的指定事件處理程序

另一方面,我在我的頁面中寫了一個函數。例如一個緩慢淡入文本框(輸入標籤)的函數。

因此,我們有:

  • 一個jQuery插件
  • 由jQuery插件添加了一個形象 - >>> ID = 「MYIMAGE」
  • 點擊圖片事件導致--- >>彈出一個div
  • 輸入標籤--- >> ID = 「MyInput」
  • 我該功能可隱藏輸入--- >> hideSlowInput()

重要注意事項:我不想更改插件。我想覆蓋圖像的事件處理程序而無需更改插件。

編輯:我還沒有碼開popupdiv,我剛開始的$(document)中。就緒插件現在

,我怎麼能強迫每一個運行我的功能後,打開彈出式DIV我點擊圖片時間?

+0

如果您張貼一些代碼來了解你在找什麼它會更簡單?委託事件,觸發或什麼... – 2013-05-04 16:15:00

+0

我在我的大項目中有一個複雜的示例,所以我通過一個精神示例簡化了它。 – RAM 2013-05-04 16:19:38

+1

你想**在其圖像創建綁定的單擊事件處理程序運行**之前單擊圖像運行自定義函數? – Ejaz 2013-05-04 16:22:04

回答

0

繼@烤的回答

我強迫老事件處理程序爲新的事件處理程序的回調運行:

Example:

$('#myBtn').click(function(){ 
    alert(1); 
}); 

$('#myBtn').click(function(){ 
    alert(2); 
}); 

$('#myBtn').click(function(){ 
    alert(3); 
}); 

$('#myBtn').click(function(evt){ 
    alert(4); 
}); 

//------Adding A Custom Function Befor All Click Event Handlers And Forcing Theme Run As Callback Of The Custom Function-------- 

console.clear(); 
var objEvents=jQuery.extend(true, {}, $._data($("#myBtn")[0], "events")); 
$('#myBtn').unbind('click'); 

var callEventHandlers=function(myEventName,myEvents){ 
     $.each(myEvents, function(i, event) { 
      if(i==myEventName){ 
       $.each(event, function(j, h) { 
        // console.log(h.handler.toString()); 
        h.handler.call() 
       }); 
      } 
     }); 
} 

$('#myBtn').click(function(evt){ 
    $(this).fadeOut(3000,function(){callEventHandlers('click',objEvents)}); 
}); 
0

不清楚是什麼,你確實需要在這裏(除非您提供相關的代碼),但我認爲你需要在這裏委託的單擊事件..

由於圖像動態地添加你需要的委派事件中使用。 。

$(document).on('click','#MyImage',function(){ 
    alert('clicked image'); 
    //codes to open your popopdiv 
}); 

注:由於圖像添加的,你可能最終有相同的IDS的圖像(除非您要添加一個圖片),這是無效的.. ID應該永遠是獨一無二的......它會如果你可以用class而不是id添加圖像,並且使用類選擇器.Myimage ..並將它委託給c losest統計的父容器比文件本身越好..

+0

我的形象有類。我沒有打開popupdiv的代碼。代碼被寫入插件中,並且他們單擊事件處理程序assignd插件中的圖像。我剛剛在$(document).ready中啓動插件。 – RAM 2013-05-04 16:30:05

1

繼EJAY @的評論

這基本上是不可能的,至少,不是在文件{沒有什麼我能找到的公開支持...}

但是,如果你談論的是使用jQuery來打開彈出DIV處理程序綁定插件,您可以試試這個:

//declare your function 
function myfunction(){ 
    alert('ok'); 
} 
//bind click handler to image with class 'myclass' 
$('.myclass').click(myfunction); 

//set this handler in first with keeping other already bound events 
var myH = $._data($(".myclass")[0], "events").click.pop(); 
$._data($(".myclass")[0], "events").click.unshift(myH); 

如果沒有其他點擊處理程序,你可能只是顛倒順序:

[].reverse.call($._data($('.myclass')[0]).events.click); 

看到一個通用演示HERE

+0

你的回答非常好,對我來說非常有用。但我想要一個更高級的答案。最後我想第二個事件處理程序作爲第一個事件處理程序的回調。我在關於SLOW FADE函數的問題中寫道。所以我希望在淡入事件完成後運行第二個事件處理程序。我希望每個事件在上一個事件完成時運行。 – RAM 2013-05-04 20:16:56

相關問題