2015-05-04 46 views
1

在我的應用程序中,我有很多錨點標記和按鈕,其中大部分事件都通過元素上的onclick調用。

我想要的是在調用任何其他函數之前調用函數。

HTML

<input type="button" value="add" onclick="add()"> 
<input type="button" value="sub" onclick="sub()"> 
<input type="button" value="div" onclick="div()"> 

JS

function add(){ 
alert("add"); 
} 
function sub(){ 
alert("sub"); 
} 
function div(){ 
alert("div"); 
} 

$(document).on("click","input[type=button]",function(){ 
alert("bye"); 
}); 

這裏是小提琴fiddle

我假設

$(document).on("click","input[type=button]",function(){ 
.... 
}); 

稱爲第一,這樣我可以

function show(){ 
    alert("hi"); 
    } 

被稱爲前處理的東西,但事實並非如此。 應該怎麼做才能做到這一點。

我想打電話給所有錨標籤和按鈕的功能,甚至在

的onclick = 「秀()」

更新

我有更新小提琴

P.S

每個元素都有它自己的函數來調用,但$(document)中的函數是相同的,我想要調用所有被過濾的元素。 我有建議,爲什麼不使一個函數具有$(文檔)的邏輯,我已經調用了所有由元素調用的函數,例如add(),sub(),div()。 但ans不是我不能,因爲它只是一個演示我真正的應用程序退出很大,無法計算每個函數並調用其他函數。這就是爲什麼我想要一個替代品。

+0

更說明你的問題?目前尚不清楚 – ashkufaraz

+0

你的提琴應http://jsfiddle.net/qmbcgz5y/5/ – talsibony

+0

@talsibony是的,我所做的更改 –

回答

1

的onclick ATTR稱爲第一,因爲它的元素 直接事件這是怎麼回事,但你可以做一些操作來自函數本身的事件 這裏是一個你可以實現你想要的但是正如我在我的評論中說的有點混亂的方法:

<!DOCTYPE HTML> 
<html ng-app> 
    <head>  
    <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js" type="text/javascript"></script> 
    <title></title> 
    </head> 
    <body> 
    <a id="click" onclick="show(this);">c</a> 
    <script type="text/javascript"> 
    function show(t){ 
    events = $._data(document, 'events'); 
    events.click[0].handler(); 
    alert("hi"); 
    $(document).off("click","#click"); 
} 

$(document).on("click","#click",function(){ 
    alert("bye"); 
}); 
</script> 
    </body> 
</html> 

basicly你在這裏做什麼是調用其他處理程序,你執行你的onclick功能邏輯之前,換句話說,你的onclick此代碼調用其他處理程序,但你應該使用一些過濾器爲您正在尋找的事件

http://jsfiddle.net/qmbcgz5y/11/

:爲和在每個事件

另一種方式,你可以做到這一點,你可以保存的onclick值和自己的事件連接,然後取出的onclick ATTR VAL在一個循環中運行

+0

是啊!這幫了我很多:)感謝隊友 –

+0

:)你歡迎這對我來說是一個很好的習慣 – talsibony

1

您可以通過調用的onclick()事件2種方法使用簡單的解決方案下面給出:

function show(){ 
 
alert("hi"); 
 
} 
 

 
function first(){ 
 
alert("bye"); 
 
} \t
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<a id="click" onclick="first();show();">Click Me!</a>

0

JavaScript代碼

function show() { 
    function_two(); // considering the next alert, I figured you wanted to call function_two first 
    alert("hi"); 
} 

function function_two() { 
    alert("bye"); 
} 

HTML代碼

<input type="button" value="click" onclick="show()"> 
+0

希望這可以幫助 –

0

爲什麼不能在同一事件上具有所有功能?

HTML

<input type="button" value="click" > 

JS

$(document).on("click","input[type=button]",function(){ 
    // call first function 
    callToFirstFunction(); 

    // continue here with other code 
}); 
0

您正在運行捕獲與冒泡事件處理,這很好地解釋了here

如果您不在意IE < = 8,您可以在文檔上指定事件處理程序以在捕獲階段執行。但是,您必須使用addEventListener()方法分配事件處理程序,因爲這不能通過jQuery完成。

// third parameter must be true to set event to capturing phase 
document.addEventListener('click', function(event) { 
    // get the real target of the click event 
    $target = $(event.target); 

    // if it was a button, do your work 
    if ($target.is('input[type="button"]')) { 
     alert("bye"); 
    } 
}, true); 

如果需要支持IE < = 8,那麼這些其他的解決方法之一是必要的。

相關問題