2015-08-24 103 views
3

假設我有以下簡化功能。.bind()與事件處理程序

var ex = document.getElementById('exampleElement'), 
    data = { 
     foo: 'Sample text' 
    }; 

ex.addEventListener('click', function(evt, d) { 
    evt.stopPropagation(); 
    this.innerHTML = d.foo; 
}.bind(ex, null, data)); 

我意識到結合exthis在這種特殊情況下有些多餘,但我怎麼能綁定data參數,仍然保持被破壞的event說法?

我似乎無法在任何地方找到答案。

+0

這是什麼'D'參數?你無法控制該函數被調用的方式。爲什麼不使用閉包? – elclanrs

+0

d是數據,如綁定函數中的參數化。 – stafffan

回答

1

根據https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

ARG1,ARG2,...

參數傳遞給前插來調用目標函數時提供給綁定函數的參數。

這意味着您的咖喱值將來之前事件對象。看到這個搗鼓一個例子:

http://jsfiddle.net/5w4vnvof/

var clickme = document.querySelector("#clickme"); 

clickme.addEventListener("click", function(value, event) { 
    var newDiv = document.createElement("div"); 
    newDiv.innerHTML = value + "<br/>" + event.target.toString(); 

    document.body.appendChild(newDiv); 
}.bind(clickme, "curriedValue")); 
+0

不行!這爲我解決了一切。非常感謝研究! – stafffan