Opschonen/Refactor Jquery-gebeurtenisbinding om mogelijke duplicatie te voorkomen

Er is een andere manier om deze code te schrijven? Ik vind het nogal onprofessioneel en rommelig

In principe dient de code een formulier in door "Enter-toets" en muis "Klik", dus er is een andere manier?

$("#form-signup-login input#login-submit").click(function()
{
    doLogin();
});
$('input#login-request-username-email, input#login-request-password').keyup(function(e){
    if(e.keyCode == 13)
        doLogin();
});

Bedankt voor je tijd!

1
Je kernfunctie is doLogin. Omdat u een test op de key-up hebt, is het in beide gevallen moeilijk om dezelfde functie uit te voeren als de handler.
toegevoegd de auteur Denys Séguret, de bron
@YiJiang +1: id mag niet worden voorafgegaan door een prefix
toegevoegd de auteur Denys Séguret, de bron
U hoeft "(opgelost)" niet toe te voegen aan het onderwerp. Markeer gewoon het juiste antwoord.
toegevoegd de auteur Emil Vikström, de bron
Het ziet er perfect cromulent voor me uit.
toegevoegd de auteur Paul Tomblin, de bron
Het enige dat ik zou veranderen is dat de selector voor de laatste id selector onnodig is, omdat id s uniek zijn
toegevoegd de auteur Yi Jiang, de bron
Zou dieper ingaan op wat u "onprofessioneel" en "rommelig" vindt in deze code?
toegevoegd de auteur Julien Bourdon, de bron
@JulienBourdon Ik dacht dat er misschien een functie is om dit samen te doen en niet met deze 2 functies: klik en keyup
toegevoegd de auteur Vlad S, de bron

4 antwoord

Are you looking for the submit event handler by any chance? http://api.jquery.com/submit/

3
toegevoegd

Het lijkt erop dat u dit wilt doen bij indienen: waarom niet gebruiken:

$("#form-signup-login").on("submit", function() {
    doLogin();
    return false;
});

Waar id de ID van het formulier is, geen van de ingangen.

0
toegevoegd
Ah. Dit kan nog steeds werken, hoewel mijn geheugen misschien roestig is.
toegevoegd de auteur Rich Bradshaw, de bron
Ik gebruik ajax om het formulier in te dienen. Ik ben vergeten te specificeren ...
toegevoegd de auteur Vlad S, de bron
$("#login-submit").click(doLogin);

$('#login-request-password').keyup(function(e){
    if(e.keyCode === 13)
        doLogin();
});

Uitleg:

  1. Het is niet nodig om id-selecteurs met containers toe te voegen omdat ze uniek zijn op de pagina en u zult terugvallen op de native getElementById -methode die sneller is dan de sizzle-engine.
  2. U kunt in het eerste geval alleen de functie-aanwijzer gebruiken, u hoeft geen nieuwe terugbelfunctie te bouwen
  3. Ik zou de keyup-gebeurtenis alleen binden aan het wachtwoordveld in plaats van aan het veld voor de gebruikersnaam, omdat daar een natuurlijke stroom is

Als alternatief, bind formulier submit, dat dit allemaal standaard voor u verzorgt ..

$("#form-signup-login").submit(doLogin);
0
toegevoegd
Dat is wat ik bedoelde. Dank je !
toegevoegd de auteur Vlad S, de bron
$("#form-signup-login").submit(function (ev){
 //Do not let the browser handle the submit action
  ev.preventDefault();
 //Execute your custom submit function
  doLogin();
});

Voila!

0
toegevoegd