2009-05-14 6 views
1

J'ai donc une page html (générée avec php), qui fera une fenêtre popup contenant un formulaire. Tous mes trucs javascript sont dans un fichier javascript séparé. Je veux savoir s'il est possible d'appeler une fonction de mon fichier javascript depuis le formulaire resulttext.appelant une fonction javascript à partir d'un résultat de formulaire

Voici la première page html

<script type="text/javascript" src="x.js"></script><h1>hello</h1> 
<div id='form'> 
<a href='#' onclick="makewindows('<form action="process.php" method="post" enctype="multipart/form-data "><label for="file">Filename:</label><input type="file" name="file" id="file"/> <br /><input type="submit" name="submit" value="Submit" onclick="" /></form>'); return false;"> 
click here</a> 
</div> 

Après avoir téléchargé un fichier, le texte est le résultat généré qui indique le nom du fichier. Dans x.js j'ai une fonction pour mettre à jour un div dans la fenêtre d'origine. SO puis-je l'appeler à partir d'une page html normale?

Voici le code pour maewindows

function makewindows(html){ 
child1 = window.open ("about:blank"); 
child1.document.write(html); 
child1.document.close(); 
} 

Je ne veux pas appeler la fonction avec onclick, je veux l'appeler du texte de résultat de la forme.

Répondre

0

Que fait makewindows? Vous souhaitez probablement placer ce code HTML dans un modèle ou dans un fichier distinct. Oui, vous pouvez appeler javascript à partir d'un événement de forme, l'événement onsubmit.

+0

Je ne veux pas l'appeler de onclick, je veux l'appeler à partir du résultat du formulaire. Makewinows fait juste une fenêtre contextuelle. – Josh20002

0

Oui, vous pouvez. Vous devez juste l'appeler par son nom comme avec n'importe quelle fonction définie dans le fichier html lui-même.

+0

Je ne sais pas comment appeler une fonction javascript à moins que ce soit avec onclick ou attaché à quelque chose .... – Josh20002

+0

Il suffit de le mettre à l'intérieur d'un tag

0

Tobias a raison. Mais sans la propriété opener, la fenêtre principale et la fenêtre cible ne peuvent pas communiquer - il n'y a pas de lien.

Cet article daté illustre une solution pour les clics, bien que celle avec des cibles. Peut-être amusant de jouer avec. http://homepage.mac.com/bigeuniverse/tests/targetwindows/

Toutefois, il est préférable de le faire avec des écouteurs et des fonctions qui leur sont liés. Je définirais clairement l'ouvre-porte dans votre 'makewindows' fonction, ainsi que de définir la fenêtre.

PARENT: Comme ceci:

var child1 = null; 
function makewindows(html) 
{ 
    if (!child1 || child1.closed) { 
     child1 = window.open(...); 
     ...//rest of original code 
    } else { 
     child1.focus(); 
     /* in case it's okay to simply open the same window 
      for another upload; otherwise, nix this section*/ 
    } 
    if (child1.opener == null) { 
      child1.opener = self; 
    }   
} 

ENFANT: A supposer que x.js a une fonction nommée 'childListener': Votre process.php pourrait offrir une fonction JavaScript auto-exécution au ' la page enfant, comme:

var talkToParent = function(saywhat) 
{ 
    opener = opener || self.opener || window.opener; 
    if (opener != null && saywhat) { 
     opener.childListener(saywhat); 
    } 
}($uploaded_filename); 

Ceci exécuter immédiatement (à l'intérieur des balises de script bien sûr), aussi longtemps que le nom du fichier a été livré téléchargé. Vous pouvez en fait alerter le parent d'une erreur de téléchargement si vous définissez votre php pour le livrer à la place du nom de fichier, dans cet événement. Encore une fois, cela suppose que la fonction 'childListener' est dans x.js ou un autre script appelé depuis la page d'ouverture.

Questions connexes