2011-02-04 2 views
36

Tôi đang sử dụng jQuery phiên bản 1.5. Tôi đang tìm kiếm tại jQuery change() chức năng và đặc biệt là ở bit này:Làm thế nào để sử dụng một hàm lấy đối số bằng phương thức change() của jQuery?

.change([ eventData ], handler(eventObject)) 
eventData: A map of data that will be passed to the event handler. 
handler(eventObject): A function to execute each time the event is triggered. 

gì chính xác là một "bản đồ của dữ liệu" trong JavaScript? Làm thế nào tôi có thể sử dụng chức năng kiểm tra sau đây như một trình xử lý sự kiện?

var myHandler = function(msg){alert(msg);}; 

Tôi đã thử điều này:

$("select#test").change(["ok"], myHandler); 

và các báo cáo cảnh báo [đối tượng Object]

Trả lời

56

Xem event.data. Dữ liệu không được truyền như là đối số để xử lý, nhưng là tài sản của đối tượng sự kiện:

$("select#test").change({msg: "ok"}, function(event) { 
    alert(event.data.msg); 
}); 

các handler luôn chỉ chấp nhận một đối số, đó là đối tượng event. Đây là lý do tại sao cảnh báo của bạn hiển thị "[object Object]", chức năng của bạn đang in đối tượng sự kiện.
Nếu bạn muốn sử dụng chức năng với các đối số tùy chỉnh, bạn phải quấn chúng vào chức năng khác:

$("select#test").change({msg: "ok"}, function(event) { 
    myHandler(event.data.msg); 
}); 

hoặc chỉ

$("select#test").change(function(event) { 
    myHandler("ok"); 
}); 

Btw. bộ chọn được viết tốt hơn là $('#test'). ID là (nên) duy nhất. Không cần phải thêm tên thẻ.

+0

Một điều cần lưu ý về điều này là $ (this) mà myHandler nhận được là khác nhau khi được gọi theo cách này.Nếu bạn cần $ gốc của bạn (điều này) bạn có thể vượt qua nó như là một tham số sau khi "ok". –

13

gì chính xác là một "bản đồ của dữ liệu" trong Javascript?

Về cơ bản chỉ là một đối tượng, ví dụ .:

var data = { 
    foo: "I'm foo", 
    bar: "I'm bar" 
}; 

đối tượng Tất cả các hoạt Javascript cơ bản là bản đồ (hay còn gọi là "từ điển" hay còn gọi là "mảng kết hợp").

Làm cách nào tôi có thể sử dụng chức năng kiểm tra sau làm trình xử lý sự kiện?

By gói nó trong chức năng khác:

$("select#test").change(function() { 
    myHandler($(this).val()); 
}); 

Đó gọi myHandler với giá trị của hộp chọn bất cứ khi nào nó thay đổi.

Nếu bạn muốn sử dụng phần eventData, thêm một đối tượng trước khi xử lý:

$("select#test").change({ 
    foo: "I'm foo" 
}, function(event) { 
    myHandler(event.data.foo, $(this).val()); 
}); 

Đó gọi myHandler với "Tôi foo" như là đối số đầu tiên, thì giá trị của chọn hộp, bất cứ khi nào nó thay đổi.