2010-03-05 5 views
7

Je peux lier un événement jquery à cet élément comme:gestionnaire d'événements jQuery ne fonctionne pas

<script type="text/javascript"> 
$('#new_key').ready(function() { 
alert('Handler for .submit() called.'); 
return false; 
}); 

Il fonctionne comme prévu

mais si je fais:

<script type="text/javascript"> 
$('#new_key').submit(function() { 
    alert('Handler for .submit() called.'); 
    return false; 
}); 

ça ne marche pas. Est-ce que quelqu'un sait pourquoi? Qu'est-ce que je rate?

Répondre

7

Vous devez faire:

$(function() { //equal to $(document).ready() { 
    $('#new_key').submit(function() { 
    alert('Handler for .submit() called.'); 
    return false; 
    }); 
}); 

Le formulaire peut ne pas être prêt à être lié quand vous appelez, vous devez l'envelopper pour exécuter et gréer le gestionnaire lorsque le document est prêt .

+1

+1, mais pourquoi l'utilisation $ (function() {}) au lieu de $ (document) .ready()? Le premier ne lit pas bien, tandis que le second est beaucoup plus clair (IMHO) – Matt

+0

@Matt - Juste mon habitude pour la brièveté puisque je le tape probablement 50 fois par jour je suppose, celui que vous préférez fonctionnera bien cependant si ... quel que soit flotte votre bateau. –

+0

@Matt ils sont réellement différents, si je ne me trompe pas, mais légèrement, et je ne me souviens pas comment. Je pense, cependant, que $ (function() {}) est en quelque sorte meilleur. – Seaux

1

$.ready(), si utilisé, doit être utilisé sur le document pour indiquer que le DOM a été entièrement chargé.

$(document).ready(function(){ 

    $("#new_key").submit(function(e){ 
    e.preventDefault(); 
    alert("Submit called!"); 
    }); 

});​ 

Démo en ligne: http://jsbin.com/ojaqo3/edit