2009-10-28 3 views
0

Jusqu'à présent, au cours de mon développement du site je suis stocker toutes mes fonctions jQuery dans un fichier .js externe, voici deux exemples des fonctions à l'intérieur:Déclencher fonctions jQuery avec PHP

// Loads the login form into the page. 
function loadLoginForm() { 
    $('[name=loadLoginForm]').click(function() { 
    $("#loadingImage").css({ display:"block" }); 
    $("#mainWrap").load("modules/web/loginForm.php", null, function(data) { 
     loadRegisterForm(this, data); 
     validateLoginDetails(this, data); 
     characterSelect(this, data); 
    }); 
    }); 
} 

// Loads the register form into the page. 
function loadRegisterForm() { 
    $('[name=loadRegisterForm]').click(function() { 
    $("#loadingImage").css({ display:"block" }); 
    $("#mainWrap").load("modules/web/registerForm.php", null, function(data) { 
     loadLoginForm(this, data);  
     registerUser(this, data); 
    }); 
    }); 
} 

La façon dont je suis déclencher ces fonctions était de faire écho à un lien sur la page en utilisant PHP comme ceci;

Click <a href="#" name="loadLoginForm"><i>here</i></a> to login. 

Le problème que je suis confronté est maintenant comment puis-je laisser le côté PHP du déclencheur de code un événement au lieu de donner à l'utilisateur un lien pour déclencher?

La seule réponse que j'ai trouvée était de faire en sorte que le PHP fasse écho à du code JavaScript, donc quand la page se chargera, le JavaScript déclenchera la fonction nécessaire, mais je ne sais pas comment le coder.

Une situation où cela devra être utilisé est par exemple lorsque l'utilisateur s'est connecté avec succès, je n'ai pas gagné le PHP pour donner à l'utilisateur un lien pour aller à la prochaine partie Je ne veux pas y aller automatiquement .

Répondre

3

Je pense qu'il est préférable d'avoir tout un tas de fonctions Javascript à l'extérieur comme vous semblez le faire. Aucun code (ou peu) doit être exécuté dans ce fichier JS externe commun. Ensuite, dans vos pages HTML eux-mêmes vous ajouter un peu de Javascript dynamique:

<script type="text/javascript"> 
$(function() { 
    loadLoginForm(); 
    loadRegisterForm(); 
}); 
</script> 

Sinon, vous pouvez mettre le code prêt() à l'intérieur des fonctions. De cette façon, seul le code minimal et nécessaire est exécuté sur une page. Faites-moi confiance, je l'ai fait dans l'autre sens (où tout le code est exécuté sur chaque page) et les temps de chargement de la page deviennent stupides très rapidement.

Edit: si vous voulez simplement d'invoquer un événement, que vous avez:

<a href="#" id="delete">Delete</a> 

il vous suffit:

$(function() { 
    $("#delete").click(); 
}); 

(en supposant que le gestionnaire de clic a été attribué). click() sans arguments déclenche un événement click.

Vous pouvez également définir "this" de manière efficace en mode manuel appelé Javascript. Imaginez que vous avez:

$("#delete").click(delete_stuff); 

function delete_stuff() { 
    alert($(this).attr("href")); 
    return false; 
}); 

vous pouvez appeler ailleurs avec:

delete_stuff.call($("#delete")[0]); 

qui établit explicitement "ce". Voir JavaScript call and apply.

Cela aide-t-il?

+0

Désolé mais ce n'est pas ce dont j'ai besoin. Votre script déclenche les fonctions réelles, mais comme vous pouvez le voir dans mes exemples, j'appelle les fonctions dans les autres fonctions pour qu'elles fonctionnent lorsque je charge de nouveaux éléments dans la page avec Ajax. Je crois que j'ai besoin d'un gestionnaire d'événements à l'intérieur de la fonction, puis d'un code qui reçoit des échos sur la page avec PHP qui déclenche ce gestionnaire d'événements mais je ne sais pas comment faire. – Stanni

0

Le problème que je suis confronté est maintenant comment je laisse le côté PHP du déclencheur de code un événement au lieu de donner à l'utilisateur un lien pour déclencher?

Peut-être utiliser le load event? Lorsque '[name = loadRegisterForm]' ou '[name = loadLoginForm]' apparaissent sur la page, ils doivent exécuter le code dans le rappel.Je n'ai pas testé cela, et je ne suis pas sûr que ce soit ce que vous demandiez, mais je crois que c'est ainsi que fonctionne l'événement ...

Avez-vous envisagé de faire autrement? Vous devriez éviter d'utiliser javascript s'il y a de toute façon que le bon html peut être créé par le php au chargement de la page - après tout, c'est ce qu'il est là pour. Je ne suis pas normalement le genre de gars qui suggère que vous devriez faire un site web toujours sans javascript, mais cela devrait être complètement possible ici et c'est une bonne pratique.