2012-03-04 4 views
1

Toutes mes excuses pour le titre générique.Conflits de code jQuery

J'ai deux fichiers jQuery, un gère les soumissions de formulaire et un gère les hyperliens de page. La soumission de formulaire vérifie que les entrées de formulaire ne sont pas vides, si elle est - il informe l'utilisateur et affichera un message d'erreur, lorsque le formulaire est rempli dans le formulaire, les données sont passées à un fichier de traitement.

Les liens hypertexte chargent de nouvelles données de page dans un div, ces nouvelles données de page incluent souvent des formulaires tels que traités par le fichier de traitement.

Je ne sais pas pourquoi - mais ~ 60% du temps, la soumission du formulaire sera «actualiser» sur le clic et charger la page d'index principal OU la dernière page visitée. Cela semble entièrement aléatoire.

Je ne vois pas pourquoi cela se passe et si quelqu'un peut me montrer, je l'apprécierais grandement.

Code de soumission du formulaire:

$(document).ready(function(){ 

    $('.ajax_form').submit(function() { 

     // check for empty inputs 
     var errors = 0; 
     $(".ajax_form :input").map(function(){ 
      if(!$(this).val()) { 
       errors++; 
      } 
     }); 

     // if empty inputs inform user 
     if(errors > 0){ 
      $('#results').text("All fields are required"); 
      return false; 
     } 

     // hide form and show loader 
     $(".ajax_form").slideUp("normal"); 
     $('#results').html('<span id="load">Loading..</span>'); 

     // post data to processing file 
     $.post(
      'processing.php', 
      $(this).serialize(), 
      function(data){ 
       $("#results").slideDown("normal"); 
       $("#results").html(data) 
      } 
     ); 

     return false; 

    }); 

}); 

Code Navigation:

$(document).ready(function(){ 

    // if hash is already set, load linked data 
    var hash = window.location.hash.substr(1); 
    $('#nav li a').each(function(){ 
     if(hash == $(this).attr('href')){ 
      var toLoad = hash + '.php'; 
      $('#content').load(toLoad) 
     } 
    }); 

    // each menu item on click load linked data 
    $('#nav li a').click(function(){ 

     var toLoad = $(this).attr('href') + '.php'; 
     window.location.hash = $(this).attr('href'); 

     $('#content').prepend('<span id="load">Loading..</span>'); 
     $('#content').hide(); 
     $('#content').load(toLoad); 
     $('#content').slideDown('normal'); 

     return false; 

    }); 

}); 
+2

Ma conclusion approximative est que cette fonction de clic échoue pour une raison quelconque et ne renvoie pas false, provoquant l'ouverture du lien comme d'habitude. Avez-vous des erreurs dans la console JavaScript? –

+1

Peut-être que vous devriez vérifier 'if (! $ (This) .val(). Length) {errors ++; } '? En outre, votre 'return false;' est en bas du code. Vous devez utiliser '$ ('. Ajax_form'). Submit (fonction (e) {e.preventDefault(); ...});' – Shef

+0

chargez-vous jquery à partir d'un cdn? – Rafay

Répondre

0

Votre formulaire rafraichit car avant d'atteindre la partie de return false;, les quelque part brise les scripts avant. Utilisez firebug ou similaire pour détecter cela. Assurez-vous de gérer tous les résultats ou toutes les conditions.

Peut être une course à sec rapide peut détecter les lacunes.