Script javascript qui ne s'applique pas
Fermé
kd13
Messages postés
87
Date d'inscription
jeudi 5 janvier 2012
Statut
Membre
Dernière intervention
20 juillet 2013
-
17 févr. 2012 à 16:22
kd13 Messages postés 87 Date d'inscription jeudi 5 janvier 2012 Statut Membre Dernière intervention 20 juillet 2013 - 17 févr. 2012 à 18:22
kd13 Messages postés 87 Date d'inscription jeudi 5 janvier 2012 Statut Membre Dernière intervention 20 juillet 2013 - 17 févr. 2012 à 18:22
A voir également:
- Script javascript qui ne s'applique pas
- Script vidéo youtube - Guide
- Telecharger javascript - Télécharger - Langages
- Ghost script - Télécharger - Polices de caractères
- Microsoft activation script - Accueil - Windows
- Script bat - Guide
9 réponses
Mihawk
Messages postés
4315
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
846
17 févr. 2012 à 16:34
17 févr. 2012 à 16:34
Hello,
Qu'entends-tu par "le script s'applique une seule fois sur la premiere ligne" ?
Le PHP ne charge qu'une ligne ?
Ou bien le PHP charge tout mais cela ne fonctionne qu'avec une des lignes affichées ?
Qu'entends-tu par "le script s'applique une seule fois sur la premiere ligne" ?
Le PHP ne charge qu'une ligne ?
Ou bien le PHP charge tout mais cela ne fonctionne qu'avec une des lignes affichées ?
AssassinTourist
Messages postés
5710
Date d'inscription
lundi 16 janvier 2012
Statut
Contributeur
Dernière intervention
29 février 2024
1 311
17 févr. 2012 à 16:38
17 févr. 2012 à 16:38
Bonjour,
Autocomplete se fait à partir de l'id de ton input ? Le problème peut venir du fait que tous tes input auront le même id (d'après ton code php, ce serait searchField) Il faut alors les différencier.
Autocomplete se fait à partir de l'id de ton input ? Le problème peut venir du fait que tous tes input auront le même id (d'après ton code php, ce serait searchField) Il faut alors les différencier.
Mihawk
Messages postés
4315
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
846
17 févr. 2012 à 16:39
17 févr. 2012 à 16:39
Pff moi aussi j'avais vu le problème. Mais j'affinais l'énoncé avant de le dire ^^
AssassinTourist
Messages postés
5710
Date d'inscription
lundi 16 janvier 2012
Statut
Contributeur
Dernière intervention
29 février 2024
1 311
17 févr. 2012 à 16:42
17 févr. 2012 à 16:42
Rho, le jaloux =)
kd13
Messages postés
87
Date d'inscription
jeudi 5 janvier 2012
Statut
Membre
Dernière intervention
20 juillet 2013
1
17 févr. 2012 à 17:08
17 févr. 2012 à 17:08
non seul ce input qui a l'id searchfield
Mihawk
Messages postés
4315
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
846
17 févr. 2012 à 17:09
17 févr. 2012 à 17:09
Oué :-P
Pour compléter la réponse à notre internaute en détresse : une des règles principales du HTML est que les ID sont uniques ! Les classes, elles, peuvent être utilisés plusieurs fois.
Si tous les div ont le même ID, comment veux-tu que le JS les distingue ? Il s'arrête sur le premier qu'il trouve car il part du principe que ça sera le seul :-)
Pour compléter la réponse à notre internaute en détresse : une des règles principales du HTML est que les ID sont uniques ! Les classes, elles, peuvent être utilisés plusieurs fois.
Si tous les div ont le même ID, comment veux-tu que le JS les distingue ? Il s'arrête sur le premier qu'il trouve car il part du principe que ça sera le seul :-)
Mihawk
Messages postés
4315
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
846
17 févr. 2012 à 17:12
17 févr. 2012 à 17:12
Ah-bon ?
Pourtant tu as l'air de mettre cet ID dans le while ; donc tous les éléments l'auront !
Pourtant tu as l'air de mettre cet ID dans le while ; donc tous les éléments l'auront !
Mihawk
Messages postés
4315
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
846
17 févr. 2012 à 17:25
17 févr. 2012 à 17:25
Bon, reprenons.
Qu'appelles-tu ton "script" ?
Dans quel langage est-il écrit ?
Peux-tu nous poster son code ?
Qu'appelles-tu ton "script" ?
Dans quel langage est-il écrit ?
Peux-tu nous poster son code ?
kd13
Messages postés
87
Date d'inscription
jeudi 5 janvier 2012
Statut
Membre
Dernière intervention
20 juillet 2013
1
17 févr. 2012 à 17:27
17 févr. 2012 à 17:27
"autocomplete.js il est ecrit en javascript !
voila le code :
// global variables
var acListTotal = 0;
var acListCurrent = -1;
var acDelay = 500;
var acURL = null;
var acSearchId = null;
var acResultsId = null;
var acSearchField = null;
var acResultsDiv = null;
function setAutoComplete(field_id, results_id, get_url)
{
// initialize vars
acSearchId = "#" + field_id;
acResultsId = "#" + results_id;
acURL = get_url;
// create the results div
$("#auto").append('<div id="' + results_id + '"></div>');
// register mostly used vars
acSearchField = $(acSearchId);
acResultsDiv = $(acResultsId);
// reposition div
repositionResultsDiv();
// on blur listener
acSearchField.blur(function(){ setTimeout("clearAutoComplete()", 200) });
// on key up listener
acSearchField.keyup(function (e) {
// get keyCode (window.event is for IE)
var keyCode = e.keyCode || window.event.keyCode;
var lastVal = acSearchField.val();
// check an treat up and down arrows
if(updownArrow(keyCode)){
return;
}
// check for an ENTER or ESC
if(keyCode == 13 || keyCode == 27){
clearAutoComplete();
return;
}
// if is text, call with delay
setTimeout(function () {autoComplete(lastVal)}, acDelay);
});
}
// treat the auto-complete action (delayed function)
function autoComplete(lastValue)
{
// get the field value
var part = acSearchField.val();
// if it's empty clear the resuts box and return
if(part == ''){
clearAutoComplete();
return;
}
// if it's equal the value from the time of the call, allow
if(lastValue != part){
return;
}
// get remote data as JSON
$.getJSON(acURL + part, function(json){
// get the total of results
var ansLength = acListTotal = json.length;
// if there are results populate the results div
if(ansLength > 0){
var newData = '';
// create a div for each result
for(i=0; i < ansLength; i++) {
newData += '<div class="unselected">' + json[i] + '</div>';
}
// update the results div
acResultsDiv.html(newData);
acResultsDiv.css("display","block");
// for all divs in results
var divs = $(acResultsId + " > div");
// on mouse over clean previous selected and set a new one
divs.mouseover( function() {
divs.each(function(){ this.className = "unselected"; });
this.className = "selected";
})
// on click copy the result text to the search field and hide
divs.click( function() {
acSearchField.val(this.childNodes[0].nodeValue);
clearAutoComplete();
});
} else {
clearAutoComplete();
}
});
}
// clear auto complete box
function clearAutoComplete()
{
acResultsDiv.html('');
acResultsDiv.css("display","none");
}
// reposition the results div accordingly to the search field
function repositionResultsDiv()
{
// get the field position
var sf_pos = acSearchField.offset();
var sf_top = sf_pos.top;
var sf_left = sf_pos.left;
// get the field size
var sf_height = acSearchField.height();
var sf_width = acSearchField.width();
// apply the css styles - optimized for Firefox
acResultsDiv.css("position","absolute");
acResultsDiv.css("left", sf_left - 2);
acResultsDiv.css("top", sf_top + sf_height + 5);
acResultsDiv.css("width", sf_width - 2);
}
// treat up and down key strokes defining the next selected element
function updownArrow(keyCode) {
if(keyCode == 40 || keyCode == 38){
if(keyCode == 38){ // keyUp
if(acListCurrent == 0 || acListCurrent == -1){
acListCurrent = acListTotal-1;
}else{
acListCurrent--;
}
} else { // keyDown
if(acListCurrent == acListTotal-1){
acListCurrent = 0;
}else {
acListCurrent++;
}
}
// loop through each result div applying the correct style
acResultsDiv.children().each(function(i){
if(i == acListCurrent){
acSearchField.val(this.childNodes[0].nodeValue);
this.className = "selected";
} else {
this.className = "unselected";
}
});
return true;
} else {
// reset
acListCurrent = -1;
return false;
}
}
voila le code :
// global variables
var acListTotal = 0;
var acListCurrent = -1;
var acDelay = 500;
var acURL = null;
var acSearchId = null;
var acResultsId = null;
var acSearchField = null;
var acResultsDiv = null;
function setAutoComplete(field_id, results_id, get_url)
{
// initialize vars
acSearchId = "#" + field_id;
acResultsId = "#" + results_id;
acURL = get_url;
// create the results div
$("#auto").append('<div id="' + results_id + '"></div>');
// register mostly used vars
acSearchField = $(acSearchId);
acResultsDiv = $(acResultsId);
// reposition div
repositionResultsDiv();
// on blur listener
acSearchField.blur(function(){ setTimeout("clearAutoComplete()", 200) });
// on key up listener
acSearchField.keyup(function (e) {
// get keyCode (window.event is for IE)
var keyCode = e.keyCode || window.event.keyCode;
var lastVal = acSearchField.val();
// check an treat up and down arrows
if(updownArrow(keyCode)){
return;
}
// check for an ENTER or ESC
if(keyCode == 13 || keyCode == 27){
clearAutoComplete();
return;
}
// if is text, call with delay
setTimeout(function () {autoComplete(lastVal)}, acDelay);
});
}
// treat the auto-complete action (delayed function)
function autoComplete(lastValue)
{
// get the field value
var part = acSearchField.val();
// if it's empty clear the resuts box and return
if(part == ''){
clearAutoComplete();
return;
}
// if it's equal the value from the time of the call, allow
if(lastValue != part){
return;
}
// get remote data as JSON
$.getJSON(acURL + part, function(json){
// get the total of results
var ansLength = acListTotal = json.length;
// if there are results populate the results div
if(ansLength > 0){
var newData = '';
// create a div for each result
for(i=0; i < ansLength; i++) {
newData += '<div class="unselected">' + json[i] + '</div>';
}
// update the results div
acResultsDiv.html(newData);
acResultsDiv.css("display","block");
// for all divs in results
var divs = $(acResultsId + " > div");
// on mouse over clean previous selected and set a new one
divs.mouseover( function() {
divs.each(function(){ this.className = "unselected"; });
this.className = "selected";
})
// on click copy the result text to the search field and hide
divs.click( function() {
acSearchField.val(this.childNodes[0].nodeValue);
clearAutoComplete();
});
} else {
clearAutoComplete();
}
});
}
// clear auto complete box
function clearAutoComplete()
{
acResultsDiv.html('');
acResultsDiv.css("display","none");
}
// reposition the results div accordingly to the search field
function repositionResultsDiv()
{
// get the field position
var sf_pos = acSearchField.offset();
var sf_top = sf_pos.top;
var sf_left = sf_pos.left;
// get the field size
var sf_height = acSearchField.height();
var sf_width = acSearchField.width();
// apply the css styles - optimized for Firefox
acResultsDiv.css("position","absolute");
acResultsDiv.css("left", sf_left - 2);
acResultsDiv.css("top", sf_top + sf_height + 5);
acResultsDiv.css("width", sf_width - 2);
}
// treat up and down key strokes defining the next selected element
function updownArrow(keyCode) {
if(keyCode == 40 || keyCode == 38){
if(keyCode == 38){ // keyUp
if(acListCurrent == 0 || acListCurrent == -1){
acListCurrent = acListTotal-1;
}else{
acListCurrent--;
}
} else { // keyDown
if(acListCurrent == acListTotal-1){
acListCurrent = 0;
}else {
acListCurrent++;
}
}
// loop through each result div applying the correct style
acResultsDiv.children().each(function(i){
if(i == acListCurrent){
acSearchField.val(this.childNodes[0].nodeValue);
this.className = "selected";
} else {
this.className = "unselected";
}
});
return true;
} else {
// reset
acListCurrent = -1;
return false;
}
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Mihawk
Messages postés
4315
Date d'inscription
mercredi 29 mars 2006
Statut
Contributeur
Dernière intervention
6 janvier 2015
846
17 févr. 2012 à 17:31
17 févr. 2012 à 17:31
Alors c'est ce qu'on te dit.
Le script JS a l'air de contenir du jquery qui appelle un div dont l'ID est "searchField".
Or toi sur ta page tu positionnes plusieurs div dont l'ID est "searchField".
Le script s'arrête donc toujours sur le premier.
Essaye tu verras : charge ta page et essaye, seul le premier fonctionnera. Ensuite tu supprime le premier div (avec firebug) et le 2e marchera ; et ainsi de suite.
Je pense que ce script JS (tout fait non ?) ne fonctionne que pour un seul div de recherche... Pour en gérer plusieurs il faudrait que tu passe l'ID du div en paramètre de la méthode.
Le script JS a l'air de contenir du jquery qui appelle un div dont l'ID est "searchField".
Or toi sur ta page tu positionnes plusieurs div dont l'ID est "searchField".
Le script s'arrête donc toujours sur le premier.
Essaye tu verras : charge ta page et essaye, seul le premier fonctionnera. Ensuite tu supprime le premier div (avec firebug) et le 2e marchera ; et ainsi de suite.
Je pense que ce script JS (tout fait non ?) ne fonctionne que pour un seul div de recherche... Pour en gérer plusieurs il faudrait que tu passe l'ID du div en paramètre de la méthode.
kd13
Messages postés
87
Date d'inscription
jeudi 5 janvier 2012
Statut
Membre
Dernière intervention
20 juillet 2013
1
17 févr. 2012 à 17:41
17 févr. 2012 à 17:41
non bro j'ai un seul <input> qui a l id searchfield
AssassinTourist
Messages postés
5710
Date d'inscription
lundi 16 janvier 2012
Statut
Contributeur
Dernière intervention
29 février 2024
1 311
17 févr. 2012 à 17:39
17 févr. 2012 à 17:39
Oui attends...
Dans ta requête en php, tu n'as qu'une seule valeur, c'est ça ? (parce que sinon tu aurais tes input en plus d'une fois ! ou sinon ça plante...)
Tu as aussi mis autocomplete seulement dans ta première balise, c'est normal ?
Dans ta requête en php, tu n'as qu'une seule valeur, c'est ça ? (parce que sinon tu aurais tes input en plus d'une fois ! ou sinon ça plante...)
Tu as aussi mis autocomplete seulement dans ta première balise, c'est normal ?
kd13
Messages postés
87
Date d'inscription
jeudi 5 janvier 2012
Statut
Membre
Dernière intervention
20 juillet 2013
1
17 févr. 2012 à 17:46
17 févr. 2012 à 17:46
desolè mais jai pas compris ou est le probleme dans le code .. :/
AssassinTourist
Messages postés
5710
Date d'inscription
lundi 16 janvier 2012
Statut
Contributeur
Dernière intervention
29 février 2024
1 311
17 févr. 2012 à 17:54
17 févr. 2012 à 17:54
Moi je parle de ton code php
Tu as (en simplifié) :
while( $result = mysql_fetch_array($requete) ){
<input id="searchField" />
<inputs ... />
}
Tu as plusieurs résultats dans ton $requete ? (et donc plusieurs lignes de $result ?)
Tu as (en simplifié) :
while( $result = mysql_fetch_array($requete) ){
<input id="searchField" />
<inputs ... />
}
Tu as plusieurs résultats dans ton $requete ? (et donc plusieurs lignes de $result ?)
kd13
Messages postés
87
Date d'inscription
jeudi 5 janvier 2012
Statut
Membre
Dernière intervention
20 juillet 2013
1
17 févr. 2012 à 17:58
17 févr. 2012 à 17:58
oui j'ai plusieur resultats
c'est un affichage de donnès a partir d'une bdd
c'est un affichage de donnès a partir d'une bdd
AssassinTourist
Messages postés
5710
Date d'inscription
lundi 16 janvier 2012
Statut
Contributeur
Dernière intervention
29 février 2024
1 311
17 févr. 2012 à 18:07
17 févr. 2012 à 18:07
Oui, donc : tu auras plusieurs input qui auront le même id (searchField), un pour chaque $result. Tu peux les différencier comme ça par exemple :
int i =0;
while( $result = mysql_fetch_array($requete) ){
<input id="searchField_i" />
<inputs ... />
i++;
}
(ou avec l'id de ton result, mais ça, ça dépend de ta requête)
int i =0;
while( $result = mysql_fetch_array($requete) ){
<input id="searchField_i" />
<inputs ... />
i++;
}
(ou avec l'id de ton result, mais ça, ça dépend de ta requête)
kd13
Messages postés
87
Date d'inscription
jeudi 5 janvier 2012
Statut
Membre
Dernière intervention
20 juillet 2013
1
17 févr. 2012 à 18:22
17 févr. 2012 à 18:22
merci bien AssassinTourist mais ca marche pas
$i=0;
while( $result = mysql_fetch_array($requete) ){
echo ("<p id=\"auto\">") ;
echo ("<input id=\"searchField_".$i."\" type=\"text\" value=\"".$result["nomcompte"]."\" AUTOCOMPLETE=\"OFF\" />");
/-- les autres input --/
$i=$i+1;
$i=0;
while( $result = mysql_fetch_array($requete) ){
echo ("<p id=\"auto\">") ;
echo ("<input id=\"searchField_".$i."\" type=\"text\" value=\"".$result["nomcompte"]."\" AUTOCOMPLETE=\"OFF\" />");
/-- les autres input --/
$i=$i+1;
17 févr. 2012 à 17:07
17 févr. 2012 à 17:08
17 févr. 2012 à 17:10