2015-07-03 80 views
-1

我不善於用JS和我需要用一個漂亮的按鈕,我從這裏得到:http://codepen.io/rikschennink/pen/lEuLD/傳遞參數的功能(E)

總之,在HTML,我有:

<button data-label="click here!"></button> 

並在腳本中:

var loading = function (e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    e.target.classList.add('loading'); 
    e.target.setAttribute('disabled', 'disabled'); 
    setTimeout(function() { 
     e.target.classList.remove('loading'); 
     e.target.removeAttribute('disabled'); 
    }, 1500); 
}; 


var btns = document.querySelectorAll('button'); 
for (var i = btns.length - 1; i >= 0; i--) { 
    btns[i].addEventListener('click', loading); 
} 

據我所知,當頁面加載時,事件監聽器被添加和函數(e)在點擊執行。我需要的是能夠調用另一個函數並且在函數(e)被執行之後將參數傳遞給它,這將完成真正的工作。我怎樣才能做到這一點?

換句話說,而不具有花式按鈕,我通常能夠通過使用調用一個函數:

<button onclick="functionName(id)"; data-label="click here!"></button> 

我需要能夠花式按鈕之後調用的函數使用functionName(ID)東西做它的工作!

我知道這可能很簡單,但我仍然無法做到。

謝謝!

+0

添加它在加載函數結束? – Shilly

回答

1

,你可以添加它的click回調結束後:

var loading = function (e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    e.target.classList.add('loading'); 
    e.target.setAttribute('disabled', 'disabled'); 
    setTimeout(function() { 
     e.target.classList.remove('loading'); 
     e.target.removeAttribute('disabled'); 

     functionName(); //CALL YOU FUNCTION HERE 
    }, 1500); 
}; 
+0

謝謝,這就是我所需要的。我在「...... 1500」之後補丁;「 :/ – RonaDona

0

你可以通過對象的事件處理程序。

這裏是的jsfiddle例如:

https://jsfiddle.net/csLhymtz/

function MyObject (myTextArgument) { 
    this.myTextArgument = myTextArgument; 
} 

MyObject.prototype.handleEvent = function (event) { 
    if (event.type === "click") { 
     this.clickHandler(); 
    } 
} 

MyObject.prototype.clickHandler = function() { 
    alert(this.myTextArgument); 
} 

var myObject = new MyObject ("i have been clicked"); 
var hello = new MyObject ("hello world"); 

$("#myButton")[0].addEventListener("click", myObject, false); 
$("#secondButton")[0].addEventListener("click", hello, false); 

您可以將處理程序按鈕並作爲第二個參數傳遞JavaScriptObject。

此類對象然後將事件傳遞給稱爲handleEvent的函數。

在那裏你可以檢查你得到什麼類型的事件,並取決於執行適當的事件處理程序。您可以使用所需的所有參數創建對象,並在事件上訪問它們。

+0

似乎是一個超過頂部的解決方案,當問題是有效的「我在哪裏調用一個函數,當前一個已經完成」 – atmd

+0

哦,太好了,太集中於傳遞參數,事件處理程序。 –