2010-07-28 19 views
6

Tôi đang xác định hàm func1(); Tôi muốn nó mất một param (s) tức làgọi cho người dùng được xác định chức năng với params

var func1(aaa, bbb){ 
//do something, anything! 
}; 

sau đó tôi muốn gọi nó là sau này trong một cái gì đó doc như thế này:

$('#some_id').click(func1($this)); 

nhưng nó không làm việc.

Tôi đã rối tung với nó trong một thời gian nhưng nó rất lạ cách jquery/javascript xử lý các chức năng do người dùng xác định với tôi ít nhất. Some1 có thể cung cấp cho tôi đoạn mã đơn giản không? Thx

+0

trong khi bạn đang ở đây, xin đừng quên để chấp nhận đúng câu trả lời .. chúc mừng :) – Reigel

+1

Xem: http://stackoverflow.com/questions/2316158/jquery-how-do-you-pass-this-as-function-parameter/2316194#2316194 – deceze

Trả lời

6

Nếu tất cả những gì bạn muốn vượt qua là $(this), bạn không cần tham số vì nó sẽ có sẵn bên trong hàm được xác định.

$('#some_id').click(func1); 

Tuy nhiên, bạn không thể thêm các thông số như thế này:

$('#some_id').click(func1(param1, param2)); 

Sau đó, đối với định nghĩa chức năng của bạn, bạn chỉ có

function func1() { } 

Nếu bạn muốn các thông số khác hơn $ (này), bạn sẽ cần phải làm như sau:

$('#some_id').click(function() { 
    func1(aaa, bbb); }); 
+2

Giá trị của 'this' sẽ không tham chiếu đến phần tử khi bạn gọi 'func1' như thế. – user113716

+0

@patrick, tôi hy vọng bạn không đề cập đến '$ ('# some_id'). Click (func1);' gây ra nó .. – Reigel

+0

@Reigel - Tôi nên rõ ràng hơn. Khi tôi nói "gọi' func1' như thế "tôi muốn gọi nó từ bên trong hàm ẩn danh trong ví dụ cuối cùng. Tôi nghĩ về ví dụ đầu tiên là * truyền * 'func1'. – user113716

1

Nó phải là

function func1(aaa, bbb) { ... } 
1

Dưới đây là một ví dụ nhanh:

Hãy chắc chắn rằng bạn xác định chức năng của bạn với function. Sau đó, khi bạn muốn gọi nó từ bên trong jQuery, you should use an inline function within click().

<div>Click Me!</div> 
<div>Pick this one!</div> 
<script type="text/javascript"> 
function func1(aaa, bbb) 
{ 
    alert('You clicked the DIV that said: "' + aaa.innerHTML + '" and ' + bbb); 
};   
$('div').click(function() 
{ 
    func1(this, "that's ok."); 
}); 
</script>   
0

Bạn không thể làm điều đó như $('#some_id').click(func1($this)); vì định nghĩa .click(handler(eventObject)) ... nếu bạn gọi nó là như vậy, $this trong func1($this) sẽ được mong đợi là eventObject.

cho việc này, bạn có thể sử dụng .bind()event.data.

demo

ví dụ ..

function sum(event) { 
    alert(event.data.x + event.data.y); 
    // `this` here would refer to the element calling this function 
    // for example, $(this).attr('id') would return `someID` if called below 
} 

gọi nó như

$('#someID').bind('click',{x:4, y:5}, sum); 
5

tôi giả sử bạn đang cố gắng để đảm bảo rằng this vẫn tham chiếu các yếu tố đó đã nhận được sự kiện này.

Hãy thử nó ra:http://jsfiddle.net/jKM9s/

$('#some_id').click(function() { 
    func1.call(this, 'somearg', 'somearg'); 
}); 

    // now "this" references the element when func1 is called 
function func1(aaa, bbb){ 
    //do something, anything! 
}; 

EDIT:

Nếu tất cả các bạn muốn là tham chiếu đến phần tử nhấp, sau đó xem @ giải pháp đầu tiên phoffer của.

+0

Tôi đồng ý rằng nó chỉ phụ thuộc vào những gì OP dự định thực hiện. Thật không may, anh dường như đã quên quay trở lại với nó. –

+0

@phoffer - Vâng, điều đó xảy ra quá thường xuyên. Một nhóm người mong muốn giúp đỡ, nhưng không có sự tương tác. Có lẽ không quen với việc nhận câu trả lời quá nhanh. – user113716

+0

Bạn hoàn toàn đúng. Những gì tôi cố gắng làm nếu tôi đặt câu hỏi là đảm bảo tôi rảnh trong giờ tiếp theo, chỉ vì mục đích tương tác. Khi mọi người làm việc cùng nhau, trang web này thật tuyệt vời. –

0

Trong Javascript, bạn không thể gán hàm và chuyển đối số cùng một lúc. Sử dụng chức năng ẩn danh ...

$('#some_id').click(function() { 
    var arg1 = $(this); 
    var arg2 = 'whatever'; 

    return func1(arg1, arg2); 
}); 

Nếu tham số duy nhất bạn cần là this, chuyển nhượng các tài liệu tham khảo chức năng ...

$('#some_id').click(func1); 
+0

Tôi không biết sử dụng tốt nhất cho việc quay trở lại đó là gì ... Tôi đoán có trả về đúng hay sai? – Reigel

+0

Trả về 'false' hủy bỏ sự kiện nhấp chuột. Hữu ích khi bạn cần xác thực (ngăn chặn chuyển hướng). –

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