2013-03-09 37 views
17

Tôi muốn kích hoạt một chức năng khi trang được tải. There are many ways to do this. Tuy nhiên, khi tôi thêm $('#button').click trước chức năng của mình, thì chức năng getType không được nhận dạng. Ví dụ:jQuery mô phỏng nhấp vào

$('#button').click(function getType(id) { 
    //...some code 
}); 

error: getType is not defined

Tôi đang làm gì sai?

Chỉ cần làm rõ, trong trường hợp này tôi không thể sử dụng chức năng ẩn danh. Ngoài ra, nó không quan trọng với tôi cho dù tôi sử dụng $(document).ready hoặc $(window).bind("load", function(), nhưng bằng cách sử dụng chúng tôi vẫn nhận được lỗi "getType không được xác định".

+0

Tương tự như http://stackoverflow.com/questions/773639/how-can-i-simulate-an-anchor-click -via-jquery IMO câu trả lời là '$ (" # example ") [0] .click();' –

Trả lời

26

Bạn có thể đặt chức năng ẩn danh:

$('#button').click(function() { 
    //...some code 
}); 

Hoặc vượt qua chức năng riêng của mình:

function getType() { 
    //...some code 
} 

$('#button').click(getType); 

Nếu bạn chỉ muốn kích hoạt một cú nhấp chuột, gọi .click():

$('#button').click(); 

Ngoài ra, tham số id của bạn sẽ không phải là yếu tố của id. Nó sẽ là đối tượng sự kiện nhấp chuột. Để có được các yếu tố của id, bạn có thể tham khảo các yếu tố nhấp vào bằng this:

$('#button').click(function() { 
    var id = this.id; 
}); 

Tôi đề nghị bạn đọc một vài JavaScript và jQuery hướng dẫn (theo thứ tự đó).

+0

Tôi nghĩ tham số đầu tiên của 'click' là một thể hiện của' eventObject'. Vì vậy, id sẽ luôn là instance, không phải là 'id'. –

+0

@GabrielSantos: Đúng, đó là những gì tôi đã viết ở phần cuối của câu trả lời của tôi. – Blender

+0

Đó là giải thích khó hiểu ở cuối, khi bạn sử dụng id từ khi bắt đầu;) –

3
$('#button').click(function getType(id) { 
    //...some code 
}); 

nên là:

$('#button').click(function() { 
     [...] code here 
    } 
); 

function() { } là một callback với những gì đang có để làm gì khi tôi bấm một số yếu tố.

Nếu bạn có getType chức năng, bạn có thể vượt qua nó như một callback:

$('#button').click(getType); 

Nếu bạn muốn kích hoạt một funcion, khi tải trang, bạn có thể làm điều này:

$('#button').trigger('click'); 

Hoặc

function getType() { 
    [...] code here 
} 

getType(); 
0

Hãy thử điều này, id không thể được thông qua cách bạn làm:

$('#button').click(function() { 
    var id = this.id; 
    //...some code 
}); 
5

Bạn đang sử dụng các ký hiệu inline vậy, bạn nên sử dụng một chức năng ẩn danh (không có tên hàm)

mã của bạn nên là:

$('#button').click(function() { 
     // do your stuff here 
    } 
); 

Bên cạnh rằng, như các tiêu đề cho biết, bạn cần mô phỏng sự kiện click, đúng không?nếu có thì bạn sử dụng tốt hơn một cái gì đó như:

$('#button').on('click', function() { 
    alert($(this).text()); 
}); 
// somewhere when you want to simulate the click you call the trigger function 
$('#button').trigger('click'); 

thấy documentation here

1

Phương pháp .click() đòi hỏi một hàm callback. Vì vậy, bạn có thể thực hiện một việc như thế này:

//Define your function somewhere else 
function getType(id) { 
    //...some code 
} 

$('#button').click(function() { 
    getType($(this).attr('id')); //Execute it when its clicked. 
}); 
2

Sử dụng .trigger(event [, extraParameters ]) trên phần tử.

extraParameters
Type: Array or PlainObject
Additional parameters to pass along to the event handler.

Lợi ích bổ sung là bạn có thể truyền dữ liệu để xử lý sự kiện, trong khi đó nếu bạn sử dụng .click(), bạn không thể gán dữ liệu cho đối tượng.

$("#target").trigger('click'); 

Nếu bạn đang tìm kiếm để sử dụng extraParameters:

$("#foo").on("custom", function(event, param1, param2) { 
    alert(param1 + "\n" + param2); 
}); 
$("#foo").trigger("custom", [ "Custom", "Event" ]); 
Các vấn đề liên quan