s1ider
Messages postés8Date d'inscriptionvendredi 14 décembre 2007StatutMembreDernière intervention24 avril 2009
-
21 avril 2009 à 17:44
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 2015
-
24 avril 2009 à 13:01
Bonjour à tous!
J'espère avoir posté dans le bon topic sinon veuillez m'en excuser.
Je viens à vous parceque cela fait 2 jours que je tente d'insérer une fonction javascript dans un formulaire afin de pouvoir me la mailer avec un script mail en php.
Je créer le site de ma boite et pour une section, nous utilisons un logiciel (PictBase) pour géolocaliser nos produits.
Ce logiciel créé des pages avec ifame, un truc vraiment dégueulasse, mais je ne peux malheureusement pas faire autrement que de m'en servir. Il a une fonction "fillValueRows" qu'il faut absolument que je récupère dans mon formulaire pour savoir de quelle page il s'agit. Cette fonction, en fonction du produit à afficher, génère des références, c'est cela qu'il faut que je récupère et que je mette dans un input (hidden).
Voici le code:
<script language="JavaScript" type="text/JavaScript" src="scripts/model.js"></script>
<script language="JavaScript" type="text/JavaScript" src="scripts/runtime.js"></script>
<script language=JavaScript type="text/JavaScript">
<!--
var dataWindow = window.parent; // cardFrameset
var cardList = dataWindow.cardList;
var paramMap = dataWindow.paramMap;
var allRecords = dataWindow.allRecords;
var id = paramMap.id;
var lid = paramMap.lid;
var border = paramMap.border;
var nbDocField = params.nbDocumentField;
var nbDocFolderField = params.nbDocFolderField;
var record = allRecords[id];
var title = record["$TITLE"];
var odd = true;
// Title of window
dataWindow.document.title = title;
// -------------- Functions
function onLoad()
{
if ( border != 1 )
document.body.className='body2';
}
function fillDocumentRows()
{
for(var ind=0;ind<nbDocField;ind++)
{
var suffix = "doc" + ind + "_";
var recordSuffix = "$" + suffix;
var docFieldName = params[suffix + "Field"];
var docName = columnLabels[docFieldName]; if ( (docName null) || (typeof docName 'undefined') )
docName = "";
var idDoc = record[recordSuffix + "ID"];
var docPath = record[recordSuffix + "PATH_DOC"];
var html = "";
html += '<TD width="500px" valign="middle" height="180" align=left border=3 cellSpacing=1 cellPadding=2>\n';
html += '\n';
html += '\n';
html += '----
\n';
html += '\n';
html += '<TABLE cellSpacing=0 cellPadding=0 width=161 border=0 valign=center>\n';
html += '\n';
html += '----
\n';
html += ', \n';
html += '
';
html += docName;
html += '
</TD>\n';
html += '
\n';
html += '\n';
html += '\n';
html += '----
\n';
html += '\n';
if(idDoc == 0)
var srcPath = "./ImgPw/PwNoFile.jpg";
else
var srcPath = "./ImgPw/pw_" + idDoc + ".jpg";
var pwWidth = record[recordSuffix + "PWW"];
var pwHeight = record[recordSuffix + "PWH"];
var tagImg = '';
if((idDoc != 0) && isSelectedOption("LinkToImage"))
html += '' + tagImg + '';
else
html += tagImg;
html += ', \n';
html += '
\n';
html += '\n';
html += '\n';
html += '----
\n';
html += '\n';
if((idDoc != 0) && isSelectedOption("LinkToImage"))
{
html += '';
html += '';
}
html += ', \n';
html += '\n';
if(isSelectedOption("CopyDocument") && (docPath.length > 0) )
{
html += '   '
html += '';
html += 'voir l\'original';
html += '';
}
html += ', \n';
html += '
\n';
html += '</TD>\n';
html += '</TR></TBODY></TABLE>\n';
html += '</TD>\n';
if (ind<nbDocField-1)
html += '\n';
document.write(html);
}
}
function fillValueRows()
{
var html = "";
for(var name in record) {
var label = columnLabels[name];
var type = columnTypes[name];
htmlLoc += '</TD></TR></TBODY></TABLE>\n';
}
else
htmlLoc = 'Fiche non localisée';
html += '\n';
html += '\n';
html += '----
\n';
html += '\n';
html += '<table width="100%" border=0 cellpadding="1" cellspacing="0" class="texte">\n';
html += '----
\n';
html += ', ';
html += ' ' + label + ' ';
html + = '</td>\n';
html += '----
\n';
html += '\n';
html += htmlLoc;
html += '
\n';
html += '</td></tr></table>\n';
odd = !odd;
document.write(html);
}
function fillDocFolderRows()
{
var html = "";
for(var ind=0;ind<nbDocFolderField;ind++)
{
var suffix = "docFolder" + ind + "_";
var recordSuffix = "$" + suffix;
var fieldName = params[suffix + "Field"];
var name = columnLabels[fieldName];
var descr = record[recordSuffix + "DESCR"];
if(typeof name 'undefined') name ""; if(typeof descr 'undefined') descr "";
var data = descr.split(",");
var className = odd ? "couleur3" : "couleur4";
html += '\n';
html += '\n';
html += '----
\n';
html += '\n';
html += '<table width="100%" border=0 cellpadding="1" cellspacing="0" class="texte">\n';
html += '----
\n';
html += ', ';
html += ' ' + GetHtmlStr(name) + ' ';
html + = '</td>\n';
html += '\n';
html += '----
\n';
html += '\n';
for (var indData=0; indData<data.length-1; indData += 2 )
{
var dataName = data[indData];
var dataPath = data[indData+1];
html += '';
html += ' ';
html += GetHtmlStr(dataName);
html += '
\n';
}
La page est unique et les référence sont ensuite générée par un fichier ".js".
Si une bonne âme passait par là et me résolvé ce problème, ça serait un bonheur!!!
Merci d'avance.
A voir également:
Insérer une fonction javascript dans un formulaire
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 22 avril 2009 à 18:50
tu as bien raison, ça ne peut pas fonctionner ainsi.
il faut le faire en javascript, lorsque que tu en as besoin
<script....>
document.le name de ton formulaire.info.value=window.parent.frames['cardframeset'].fillvaluerows();
....
</script>
>>le javascript, c'est pas mon fort!
ce n'est pas une tare, mais si tu fais un site et que tu
veux utiliser, il va bien falloir que tu t'y mettes !
( quoique, le javascript n'étant jamais obligatoire.... )
@+
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 22 avril 2009 à 09:18
Bonjour,
>>Ce logiciel créé des pages avec ifame, un truc vraiment dégueulasse,
ah bon ?
c'est le logiciel qui est dégueulasse ?
parce que les iframe, ça fonctionne nickel, sur tous les navigateurs,
ça peut-être drôlement pratique, c'est simple à utiliser,
parfois on ne peut qu'utiliser un iframe ( saisie wysiwig par exemple ),....
bref, je ne vois pas ce qu'on pourrait reprocher à un iframe....
>>mais je ne peux malheureusement pas faire autrement que de m'en servir.
comme aucun inconvénient, c'est pas un drame
>>Il a une fonction "fillValueRows" qu'il faut absolument que je récupère
>>dans mon formulaire
euh ???? récupérer une fonction ? dans un formulaire ?
tu ne voudrais pas plutôt récupérer la réponse de cette fonction ?
si oui : window.parent.frames['name iframe'].toute l'iframe est disponible
( y compris les fonctions )
Cordialement [mon Site] [M'écrire] Bul
s1ider
Messages postés8Date d'inscriptionvendredi 14 décembre 2007StatutMembreDernière intervention24 avril 2009 22 avril 2009 à 10:04
Bonjour Bul3 et merci beaucoup pour ta réponse.
Ce n'est malheureusement pas ce que je cherche. La réponse de ma fonction s'affiche parfaitement dans ma frame, pas de problème sur ce point mais afin de pouvoir obtenir la référence de mon produit, je dois récupérer la réponse de cette fonction dans un champ de formulaire hidden pour ensuite pouvoir me l'envoyer par mail via php. Sans cela, je ne peux savoir sur quel produit le client porte son intérêt. Un truc du style:
<script>
document.write('');
</script>
mais je n'arrive pas à trouver la syntaxe me permettant de faire cela.
Peut-être y'aurai t'il une méthode plus simple du style un screen de la page en question à envoyer en piece jointe avec mon formulaire. Je ne sais pas si c'est possible.
Cordialement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 22 avril 2009 à 11:22
>>je dois récupérer la réponse de cette fonction dans un champ de formulaire hidden
ben... c'est ce n'est pas que je disais ??? je me cite :
tu ne voudrais pas plutôt récupérer la réponse de cette fonction ? si oui : window.parent.frames['name iframe'].tout de l'iframe est disponible donc.... ton champ.value= window.parent.frames[' ton name iframe '].ta fonction();
ou si la réponse de cette fonction est déjà dans stockée l'iframe :
ton champ.value =window.parent.frames['ton name iframe'].ta réponse à la fonction.value;
et document.write est à éviter absolument. si la page est totalement
interprétée, ce qui doit être la cas ici lors de ce document.write, ça
va commencer par effacer toute la page, y compris le javascript.
s1ider
Messages postés8Date d'inscriptionvendredi 14 décembre 2007StatutMembreDernière intervention24 avril 2009 22 avril 2009 à 16:45
Merci beaucoup de t'intéresser à mon problème, c'est vraiment sympa.
Je vais passé pour un idiot mais je ne comprend pas comment mettre en application ta solution. J'ai fait
mais forcément, la valeur du champs ne peut-être que du texte en l'occurence :
window.parent.frames['cardframeset'].fillvaluerows();
Tu l'auras remarqué, le javascript, c'est pas mon fort! Je ne sais pas comment rédiger ca. Si j'osais, je te demanderais de m'écrire une petite fraction de code créant un champ hidden avec comme frame: cardframeset et la fonction fill valuerows. Merci beaucoup.
s1ider
Messages postés8Date d'inscriptionvendredi 14 décembre 2007StatutMembreDernière intervention24 avril 2009 22 avril 2009 à 18:57
merci mille fois, je testerais ca demain au boulot mais effectivement la syntaxe me parait parfaite!
J'utilise le javascript seulement pour cette page puisque le logiciel d'export m'y oblige sinon je m'en serais bien passé!
Merci encore pour ton aide précieuse!!!
s1ider
Messages postés8Date d'inscriptionvendredi 14 décembre 2007StatutMembreDernière intervention24 avril 2009 23 avril 2009 à 17:54
Bonjour,
encore une journée à essayer mais sans résultat!
Le code que tu m'as donné ne me créer pas de champ...
Le mieux que j'ai réussi à faire c'est d'afficher deux fois sur la page la réponse à ma fonction... Forcément il m'est impossible de récupérer ca dans mon script php.
Lueur d'espoir, j'ai créé un input avec comme nom "info" (le même que dans mon script js) et là, dans ce champ s'affiche undefined. Peut-être le début d'une solution?
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 23 avril 2009 à 18:14
>>Le code que tu m'as donné ne me créer pas de champ...
ben non....
il met le résultat de la fonction dans "document.le name de ton formulaire.info"
rien de plus... que ce que tu avais demandé
encore faut-il mettre les bons name, partout, pour tout
document.le name de ton formulaire.info.value =
window.parent.frames['cardframeset'].fillvaluerows();
encore faut-il que cette fonction renivoie bien ce qu'il faut !
essaye donc alert(fillvaluerows()) et dans ton [I]frame pour
être sûr et dans la page pour tester.... et dis nous
@+
s1ider
Messages postés8Date d'inscriptionvendredi 14 décembre 2007StatutMembreDernière intervention24 avril 2009 23 avril 2009 à 18:38
C'est la bonne fonction et elle marche sans problème.
>>>il met le résultat de la fonction dans "document.le name de ton formulaire.info"
après recherche sur internet c'est bien ce que j'avais compris, donc j'ai créé un input dans mon formulaire du style
et dans le head j'ai créé une nouvelle fonction histoire que ce soit propre du style
<script>
function reference()
{
document.formulaire.info.value=window.parent.frames['mainFrame'].fillValueRows();
}
</script>
Au passage, je mettais trompé de frame, mais c'est corrigé.
Et donc quand je teste ma page, la seule chose qui s'affiche dans mon champs c'est 'undefined'...
s1ider
Messages postés8Date d'inscriptionvendredi 14 décembre 2007StatutMembreDernière intervention24 avril 2009 24 avril 2009 à 12:29
Bonjour,
grâce à la fonction alert j'ai pu tester toute une ribambelle de fonction.
Bizarrement, la fonction fillValueRows ne mettait constament undefined alors qu'elle est active dans ma page.
J'ai donc cherché une autre fonction qui pourrait me servir. La fonction title dans un script js attaché m'a paru pas trop mal et en la reconfigurant un peu, j'obtiens maintenant la référence de mon produit.
Si ca peut servir à d'autre même si c'est un cas un peu unique j'ai fait:
Bul3, merci beaucoup pour tes conseils avisés et ta patience, grâce à toi je vais pouvoir passé un week end relax!!!! T'es un champion champion!!!!!!!!
Bul3
Messages postés4933Date d'inscriptionsamedi 1 juillet 2006StatutMembreDernière intervention 2 février 201516 24 avril 2009 à 13:01
je n'ai fait que t'aiguiller ... tu as trouvé seul !
et j'en suis heureux ! c'est dans des cas comme ça
où ça me convient le mieux d'intervenir.
donner la solution, ça ne sert pas à grand chose,
aider à résoudre c'est bien plus satisfaisant,
pour tous, et surtout pour celui qui pose la question.
<humour> d'autant plus qu'ici, tu était le seul à pouvoir
résoudre avec ce dont on disposait ;o)) </humour>
<hr size="2" width="100%" />il y a les optimistes, ceux qui voient le verre à moitié plein,
les pessimistes, ceux qui le voient à moitié vide,
et les mecs simples : ceux qui le boivent.
( je suis un primaire )
<hr size="2" width="100%" />