Bonjour à tous.
Si vous êtes amateur de casse tête je vous en prie, vous allez prendre votre pied!
J'ai une page contenant un ensemble de facture présentées sous forme de tableau.
Je dois réaliser une chose très bête et banale: si je coche une case à cocher à côté de l'intitulé d'une facture, je dois pouvoir lire la cellule "Status" de ce tableau. Ou plus exactement prendre l'information dans un champ de type "hidden".
Inutile de dire que ça fonctionne impeccablement bien sous Firefox et tout autre navigateur moderne.
Mais là où le bas blesse... c'est que:
- ça ne fonctionne pas sur IE si la requête provient du serveur
- ça fonctionne sur IE si de la même page provenant du serveur je fais "afficher la source" > enregistrer dans un fichier .html et que je le lance... :aie:
La seule différence entre les 2? IE m'indique dans la version locale que pour me protéger il a restreint l'exécution des scripts... (blablabla) et je lui donne l'autorisation de supprimer la restriction...
Des petits screenshot valent la peine je pense:
http://www.jer-rebecq.be/ie_serveur.jpg
http://www.jer-rebecq.be/ie_local.jpg
Note du modérateur: attention aux images trop grandes qui déforment le forum!
Alors je vous donne la version HTML Locale (sauvée depuis IE):
Alors il se trouve que si je rajoute le site dans mes options internet comme "site de confiance" Internet Explorer interprète le javascript correctement.
Mais ce qui est très amusement c'est que:
- sur la page web envoyée par le serveur il ne me dit pas qu'il a bloqué l'exécution...
- pourquoi me fait-il ça sur cette page alors que j'effectue exactement les mêmes opérations sur d'autres? (getElementById dans un champ hidden etc...)
On me répond sur Développez.com que c'est "comme ça" mais elle est bien belle la réponse à fournir au client...
Non il doit y avoir quelque chose et j'aimerai comprendre quoi.
Modifié par Florent V. (19 Nov 2008 - 12:21)
Si vous êtes amateur de casse tête je vous en prie, vous allez prendre votre pied!
J'ai une page contenant un ensemble de facture présentées sous forme de tableau.
Je dois réaliser une chose très bête et banale: si je coche une case à cocher à côté de l'intitulé d'une facture, je dois pouvoir lire la cellule "Status" de ce tableau. Ou plus exactement prendre l'information dans un champ de type "hidden".
Inutile de dire que ça fonctionne impeccablement bien sous Firefox et tout autre navigateur moderne.
Mais là où le bas blesse... c'est que:
- ça ne fonctionne pas sur IE si la requête provient du serveur
- ça fonctionne sur IE si de la même page provenant du serveur je fais "afficher la source" > enregistrer dans un fichier .html et que je le lance... :aie:
La seule différence entre les 2? IE m'indique dans la version locale que pour me protéger il a restreint l'exécution des scripts... (blablabla) et je lui donne l'autorisation de supprimer la restriction...
Des petits screenshot valent la peine je pense:
http://www.jer-rebecq.be/ie_serveur.jpg
http://www.jer-rebecq.be/ie_local.jpg
Note du modérateur: attention aux images trop grandes qui déforment le forum!
Alors je vous donne la version HTML Locale (sauvée depuis IE):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="/js/jquery-1.2.6.js" type="text/javascript"></script>
<script src="/js/tablecloth.js" type="text/javascript"></script>
<script src="/js/general.js" type="text/javascript"></script>
<!--[if lt IE 8]>
<script src="/js/IE8.js" type="text/javascript"></script>
<![endif]-->
<link rel="stylesheet" media="screen" type="text/css" title="General" href="/css/general.css" />
</head>
<body class="tundra">
<div>
<img src='/img/logo_xxx.jpg' alt='xxx'/><br/><br/>
</div>
<div class="content">
<script type="text/javascript">
var rulesStatus = new Array();
rulesStatus["In Preparation"] = new Array();
rulesStatus["In Preparation"] ["Approved"] = 7;
rulesStatus["In Preparation"] ["Delete"] = 0;
rulesStatus["Approved"] = new Array();
rulesStatus["Approved"] ["Sent"] = 8;
rulesStatus["All"] = new Array();
rulesStatus["All"] ["Sent"] = 8;
rulesStatus["All"] ["Paid"] = 9;
rulesStatus["All"] ["Partial paid"] = 10;
function displayGeneralActions() {
i = 0;
currentCheckbox = document.getElementById('checkboxInvoice_'+i);
currentStatus = '';
isNotPossible = false;
while (currentCheckbox != null) {
if (currentCheckbox.checked == true) {
status = document.getElementById('statusName_'+i).value;
alert(status);
if (currentStatus == '')
currentStatus = status;
if ((status == 'In preparation' && currentStatus != 'In Preparation') || (status == 'Approved' && currentStatus != 'Approved')) {
isNotPossible = true;
i = 0;
break;
}
if (status != 'In preparation' && status != 'Approved')
currentStatus = 'All';
}
i++;
currentCheckbox = document.getElementById('checkboxInvoice_'+i);
}
alert('INFO: '+i+'\nStatus: '+currentStatus+'\n boolean: '+isNotPossible);
/*
TESTER si i=0 => masquer menu else afficher
si aucun checked status est vide!
*/
selection = document.getElementById('selectionGeneralActions');
if (i==0 || currentStatus=='')
selection.style.display = 'none';
else {
selection.style.display = 'block';
}
}
</script>
<select id='filter_0' name='centerFilter' onchange="filterPage('/invoice')">
<option value='all'>All centers</option>
<select id='filter_1' name='companyFilter' onchange="filterPage('/invoice')">
<option value='all'>All companies</option>
<select id='filter_2' name='statusFilter' onchange="filterPage('/invoice')">
<option value='all'>All status</option>
<option value="In Preparation">In Preparation</option><option value="Approved">Approved</option> </select>
<select id='filter_3' name='periodFilter' onchange="filterPage('/invoice')">
<option value='all'>All periods</option>
<option value="2008-09-01 2008-09-30">2008/09/01 - 2008/09/30</option><option value="2008-10-01 2008-10-31">2008/10/01 - 2008/10/31</option><option value="2008-10-02 2008-10-15">2008/10/02 - 2008/10/15</option> </select>
<select id='filter_4' name='numberFilter' onchange="filterPage('/invoice')">
<option value='all'>All numbers</option>
<option value="-">-</option><option value="2008/1">2008/1</option><option value="2008/2">2008/2</option><option value="2008/3">2008/3</option><option value="2008/4">2008/4</option> </select>
<input type='button' value='Remove filters' onclick='document.location.href="/invoice"'>
<div id="overview">
<table class="tableCSS">
<tr>
<th><input type="checkbox" onclick="javascript:controlCheckbox('checkboxInvoice_',this);displayGeneralActions();"/></th>
<th>Center</th>
<th>Number</th>
<th>Company</th>
<th>Period</th>
<th>Due date</th>
<th>Amount</th>
<th>Status</th>
<th>Operation</th>
</tr>
<tr>
<td><input type="checkbox" id="checkboxInvoice_0" name="96" onclick="javascript:displayGeneralActions()"/> </td>
<td><span id="centerName_0">XX</span></td>
<td><span id="invoiceNumber_0">-</span></td>
<td><span id="companyName_0">XX</span></td>
<td><span id="startDate_0">2008/10/01</span> - <span id="endDate_0">2008/10/31</span></td>
<td><span id="dueDate_0">2009/12/30</span></td>
<td><span id="totalPrice_0">295</span>€</td>
<td>
In Preparation <input type="hidden" id="statusName_0" value="In Preparation" />
</td>
<td>
<a href="/invoice/view?id=96"><img src="/img/view-trans.png"/></a>
<a href="/invoice/edit?id=96"><img src="/img/edit-trans.png"/></a>
<a href="/invoice/delete?id=96"><img src="/img/delete-trans.png"/></a>
<input type="hidden" id="idInvoice_0" value="96"/>
</td>
</tr>
<tr>
<td><input type="checkbox" id="checkboxInvoice_1" name="32" onclick="javascript:displayGeneralActions()"/> </td>
<td><span id="centerName_1">XX</span></td>
<td><span id="invoiceNumber_1">-</span></td>
<td><span id="companyName_1">XX</span></td>
<td><span id="startDate_1">2008/09/01</span> - <span id="endDate_1">2008/09/30</span></td>
<td><span id="dueDate_1">2008/11/30</span></td>
<td><span id="totalPrice_1">340</span>€</td>
<td>
In Preparation <input type="hidden" id="statusName_1" value="In Preparation" />
</td>
<td>
<a href="/invoice/view?id=32"><img src="/img/view-trans.png"/></a>
<a href="/invoice/edit?id=32"><img src="/img/edit-trans.png"/></a>
<a href="/invoice/delete?id=32"><img src="/img/delete-trans.png"/></a>
<input type="hidden" id="idInvoice_1" value="32"/>
</td>
</tr>
</table>
<div style="height:40px;"></div>
<fieldset id="selectionGeneralActions" class="validationButton" style="display: none;">
<legend>Pour la sélection</legend>
</fieldset>
</div>
</div>
</body>
</html>
Alors il se trouve que si je rajoute le site dans mes options internet comme "site de confiance" Internet Explorer interprète le javascript correctement.

Mais ce qui est très amusement c'est que:
- sur la page web envoyée par le serveur il ne me dit pas qu'il a bloqué l'exécution...
- pourquoi me fait-il ça sur cette page alors que j'effectue exactement les mêmes opérations sur d'autres? (getElementById dans un champ hidden etc...)
On me répond sur Développez.com que c'est "comme ça" mais elle est bien belle la réponse à fournir au client...
Non il doit y avoir quelque chose et j'aimerai comprendre quoi.
Modifié par Florent V. (19 Nov 2008 - 12:21)