2013-03-09 14 views
17

Chcę uruchomić funkcję po załadowaniu strony. There are many ways to do this. Jednak, gdy dodaję $('#button').click przed moją funkcją, funkcja getType nie zostanie rozpoznana. Na przykład:jQuery symulować kliknij

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

error: getType is not defined

Co robię źle?

Aby wyjaśnić, w tym przypadku nie mogę użyć funkcji anonimowej. Poza tym nie ma dla mnie znaczenia, czy używam $(document).ready lub $(window).bind("load", function(), ale używając tych nadal otrzymuję błąd "getType nie jest zdefiniowany".

+0

podobne do http://stackoverflow.com/questions/773639/how-can-i-simulate-an-anchor-click -vo-jquery IMO odpowiedź brzmi "$ (" # przykład ") [0] .click();' –

Odpowiedz

26

Możesz ustawić funkcję jako anonimową:

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

albo przekazać funkcję samo:

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

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

Jeśli chcesz po prostu wywołać kliknięcie, zadzwoń .click():

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

również swoją parametr id nie będzie elementu id. Będzie to obiekt zdarzenia kliknięcia. Aby uzyskać elementu id, można zwrócić się do klikniętego elementu przy użyciu this:

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

Proponuję przeczytać kilka tutoriali JavaScript i jQuery (w tej kolejności).

+0

Myślę, że pierwszym parametrem "kliknięcia" jest instancja 'eventObject'. Tak więc id zawsze będzie instancją, a nie "id". –

+0

@GabrielSantos: Tak, to jest to, co napisałem pod koniec mojej odpowiedzi. – Blender

+0

To mylące wyjaśnienie na końcu, kiedy używasz id od początku;) –

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

Powinno być:

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

function() { } jest zwrotna, co musisz zrobić, kod po kliknięciu jakiś element.

Jeśli masz funkcję getType, można przekazać go jako callback:

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

Jeśli chcesz wywołać función, podczas ładowania strony, można to zrobić:

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

Lub

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

getType(); 
0

Spróbuj tego, id nie mogą być przekazywane tak jak ty:

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

używasz notacji inline tak, należy użyć funkcja anonimowa (bez funkcji nazwa)

kodzie powinno być:

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

Obok, że jak tytuły mówią, musisz symulować wydarzenie click, prawda?jeśli tak, to lepiej użyć czegoś takiego:

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

zobaczyć documentation here

1

Sposób .click() wymaga funkcji zwrotnej. Możesz więc zrobić coś takiego:

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

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

Użyj elementu .trigger(event [, extraParameters ]).

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

Dodatkową korzyścią jest to, że można przekazać dane do obsługi zdarzeń, natomiast jeśli używasz .click(), nie można przypisać danych do obiektu.

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

Jeśli szukasz używać extraParameters:

$("#foo").on("custom", function(event, param1, param2) { 
    alert(param1 + "\n" + param2); 
}); 
$("#foo").trigger("custom", [ "Custom", "Event" ]);