2009-09-05 29 views
20

Sử dụng jQuery Tôi muốn kết buộc một hàm hiện có với một nút. Tôi đã trải qua những tài liệu và đã tìm thấy phương pháp ràng buộc nhưng các ví dụ trên jQuery ràng buộc chức năng mới được tạo ra ở đâu như tôi muốn để ràng buộc một chức năng đó đã cứng mã hóa, ví dụ:Ràng buộc một hàm JavaScript hiện có trong jQuery

function fHardCodedFunction(){ 
    //Do stuff 
} 

function fBindFunctionToElement(){ 
    $("#MyButton").bind("click", fHardCodedFunction()); 
} 


Đây có phải là có thể ? Hoặc tôi đang đi về điều này một cách sai lầm?

+0

Đây là phần liên quan từ tài liệu API jQuery: [** Nhiều bộ chọn **] (https://api.jquery.com/multiple-selector/) – informatik01

Trả lời

33

Đồng bằng fHardCodedFunction đã đề cập đến hàm và hậu tố () sẽ chỉ gọi nó. Vì vậy, chỉ cần vượt qua chức năng thay vì gọi nó và do đó chỉ cần đi qua giá trị trả về:

function fBindFunctionToElement(){ 
    $("#MyButton").bind("click", fHardCodedFunction); 
} 
+3

Điều gì sẽ xảy ra nếu tôi cần chuyển hàm được mã hóa cứng tham số? –

+10

@Jack Mills: Sau đó, bạn sẽ cần sử dụng chức năng gói (ẩn danh) như 'function() {return fHardCodedFunction (" foo "," bar "); } 'mà bạn chuyển thành hàm gọi lại thành' bind'. – Gumbo

+0

Đây gần như những gì tôi đang cố gắng làm (tôi đang sử dụng .click() thay vào đó, nhưng theo như tôi có thể nói, nó giống nhau). Tuy nhiên, hàm ràng buộc của tôi không hoạt động - chức năng bị ràng buộc có quyền truy cập vào các biến tương tự như hàm click() không? Hoặc có thể khi sử dụng cú pháp '$ (" # mydiv "), nhấn (function() {$ (" # mydiv "). Hide();}', có các biến ẩn được chuyển tới hàm không? –

2

Có bạn có thể liên kết các phương pháp đó được viết ở một nơi khác, nhưng bạn nên bỏ qua các dấu ngoặc đơn:

function fHardCodedFunction(){ 
    //Do stuff 
} 

function fBindFunctionToElement(){ 
    $("#MyButton").bind("click", fHardCodedFunction); 
} 
+0

Nếu tôi cần để vượt qua hàm hardcoded một tham số? –

4

vay từ các bài khác, bạn có thể parameterize xử lý sự kiện của bạn như sau:

function fHardCodedFunction(someValue) { 
    alert(this.id + " - " + someValue); 
} 


function fBindFunctionToElement() { 
    var someValue = "whatever"; 
    $("#MyButton").bind("click", 
     function() { 
     fHardCodedFunction.apply(this, [someValue]); 
     } 
); 
} 


$(document).ready 
(
    function() { 
    fBindFunctionToElement(); 
    } 
); 

tôi đang sử dụng áp dụng ở đây bởi vì trong chức năng fHardCodedFunction tôi muốn các this thuộc tính để tham chiếu đến phần tử MyButton. Cũng lưu ý rằng áp dụng dự kiến ​​một mảng cho tham số thứ hai, đó là lý do tại sao tôi đã bọc someValue trong dấu ngoặc vuông.

Bạn không phải thực hiện theo cách này và có thể quên thuộc tính này this hoàn toàn nếu bạn thích.

Các vấn đề liên quan