Bonjour,

Quand je récupère des éléments et que j'en fais une copie via clone(), il m'est impossible de les modifier par la suite.

J'affiche les éléments via cette fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
function get_input(_id) {
 
    var _input = null;
 
    _input = $('#div_' + _id).clone();
    alert("OK1 : "+_input.attr('id'));
    if (_input.length != 0) {
        return _input.clone();
    }
    _input = $('option[value=' + _id + ']');
    alert("_inputOption : "+_input+" et "+_input.attr('id'));
    if (_input == undefined) return false;
    if (_input.val() == '') return false;
    if(_input.attr('value'))
        return _input.clone();
 
 
 
    for(i=0;i<document.forms.selected_pack.count.value;i++)
    {
        _input=$('#packs_'+i).clone();
        //if(_id==1220)
            alert("OK :"+_input.attr('value')+"et"+_id+typeof(_id)+"et "+typeof(_input.attr('value')));
        if(_input.attr('value') == _id)
            return _input.clone();
        else
            /*if(_input.attr('value')==1220 && _id==1220)
                return _input.clone();
            else*/
                _input=false;
    }
 
    return false;
 
}
de là, un premier problème : je teste sur 3 éléments (id : 1218,1219,1220). Sur les 2 premiers, cela fonctionne, mais sur le 3e (id 1220), l'alert m'affiche :
OK1220et1220stringet string
Mais le if(_input.attr('value') == _id) retourne faux.
L'id et les types sont identiques, je ne comprends pas pourquoi la condition ne fonctionne pas.


Un deuxième problème intervient.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
function get_real_input(_id) {
    if (_id == '') return false;
 
    var _input = null;
 
    _input = $('#' + _id);
    if (_input.length != 0) {
        return _input;
    }
    _input = $('option[value=' + _id + ']');
    if (_input.attr('texte') != null) return _input;
    for(i = 0;i<document.forms.selected_pack.count.value;i++)
    {
        _input = $('#pack_'+i);
        if(_input.attr('option_id')==_id)
            {
                return _input;
            }
    }
    return false;
 
}
Cette fonction fais la même chose, sauf qu'elle renvoit l'élément réel, et pas une copie.
Je lance tout d'abord get_input() pour afficher, puis cette fonction pour récupérer les données réelles.
Une fois cette fonction lancée, quand je tente de modifier l'input, il ne veut pas se modifier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
_input = get_real_input(_array[i]);
_input.attr('disabled','disabled');
_input.attr('checked',false);
je pense que le problème vient de get_input(), car si get_input ne trouve pas le pack (comme pour l'id 1220), je parviens à le modifier par la suite.

Quelqu'un aurait-il une idée sur ces problèmes ?

Merci d'avance.

Voici le formulaire si ca peut vous aider :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
<tr id ="packs_<?php echo $i?>" value="<?php echo $option_id?>" style="border-bottom: 1px solid rgb(204, 204, 204)">
                <td>
                     <input id="pack_<?php echo $i ?>"
                           texte="<?php echo substr($object['texte'], 0, 142)?>"
                      />
                 </td>
</tr>

EDIT : en fait, les modifications sont faites sur l'input, mais sur l'objet cloné, pas sur l'objet réel. Je ne vois pas comment il fait pour récupérer cet objet, normalement, il est affiché, puis n'est plus réutilisé.

EDIT2 : 2e problème rêglé. Mon clone et mon "original" ont le même ID, ce qui a posé problème. Donc avant de faire appel à get_real_input(), j'ai fais un _input.remove(), et cela fonctionne.

EDIT3 : Le problème venait de la récupération des ID. Le problème devait les récupérer comme ceci :
1020,1132,1022,1107,1182,1183,1186,1210
Hors, il le récupérait comme ceci :
1020,1132, 1022, 1107, 1182, 1183, 1186, 1210
La fonction replace(' ','') ne faisait pas correctement son "travail".


Bonne journée.