2017-08-24 4 views
0

I ont le code HTML suivant. S'il vous plaît jetez un coup d'oeil et je vais vous expliquer le problème au fur et à mesure.Mapping entrée de formulaire HTML javascript objet à l'intérieur d'un élément nouvellement formé

<table> 
<tbody> 
<tr id="<?php echo $record['id']?>" style="..."> 
    <td><?php echo $record['id']; ?></td> 
    <td><?php echo $record['url']; ?></td> 
    <td><input type="button" name="edit" value="Edit" onclick="edit(<?php echo ($record['id'])?>)"></td> 
</tr> 
</tbody> 
</table> 

Ce que je suis en train de réaliser ici est que lorsque je clique sur le bouton « Modifier », il efface ce champ et crée de nouveaux champs vides à sa place où ces détails peuvent être saisis à nouveau et à la place de l'édition bouton, le bouton de mise à jour apparaît.

C'est ce que la fonction d'édition ressemble à:

<script> 
function edit(id){ 
    var element = document.getElementById(id); 
    $(element).empty(); 
    $(element).append("<td><input name='id' value="+id+" disabled></td>" + 
        "<td><input type='text' name='url' ></td>" + 
        "<td><input type='text' name='title'></td>" + 
        "<td><input type='button' value='Update' onclick='testFunction()'></td>"); 
} 

Le bouton de mise à jour des incendies une fonction appelée testFunction. Maintenant, dans cette fonction testFunction, je veux envoyer les nouvelles valeurs dans le nouveau formulaire que j'ai créé avec jQuery afin que je puisse envoyer ces valeurs à MySQL afin que la nouvelle valeur de title soit mise à jour pour un identifiant donné.

S'il vous plaît regarder par-dessus le code et me dire comment dois-je aller sur la résolution de ce sujet?

var testFunction = function(newID){ 
     console.log("This is the NEW id of the object that we are changing----->"); 
     console.log(newID); 
     console.log("--------------------------END------------------"); 
     $.post("update", { id: newID}) 
      .done(function() { 
       document.getElementById(id).style.display = "none"; 
      }); 
    }; 
</script> 
+0

Alors que je comprends bien que le problème dans votre cas est que vous ne pouvez pas sélectionner les éléments qui sont créés dynamiquement avec jQuery? – Artley

+0

@Artley .. Le problème est que je ne suis pas en mesure d'envoyer la valeur clé des nouveaux éléments à une nouvelle fonction qui se déclenche par un bouton que j'ai créé comme l'un des nouveaux éléments jQuery. –

+0

Donc, pourriez-vous s'il vous plaît vérifier la méthode de poste - il cherche id: id et comme je peux le voir, devrait-il être id: newID? – Artley

Répondre

0

//test record 
 
var record = { 
 
    id: 12345, 
 
    title: 'Some title', 
 
    url: 'https://stackoverflow.com/posts/45861223/edit' 
 
}; 
 

 
function action(id) { 
 
    var $element = $('#' + id), 
 
    $title = $('[name=title]', $element), 
 
    $url = $('[name=url]', $element), 
 
    $btn = $('[type=button]', $element), 
 
    isUpdate = ($btn.attr('value') != 'Edit'); 
 

 

 
    $title.prop('readOnly', isUpdate); 
 
    $url.prop('readOnly', isUpdate); 
 
    $btn.attr('value', isUpdate ? 'Edit' : 'Update'); 
 

 
    if (isUpdate) { 
 
    // show some loading mask 
 
    $.post("update", { 
 
     title: $title.val(), 
 
     url: $url.val(), 
 
     id: id 
 
     }) 
 
     .done(function() { 
 
     // here you have the new id from the server 
 
     // hide the loading mask 
 
     }); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tbody> 
 
    <tr id="12345"> 
 
     <td><input type='text' name='title' value="Some title" readOnly></td> 
 
     <td><input type='text' name='url' value="https://stackoverflow.com/posts/45861223/edit" readOnly></td> 
 
     <td><input type="button" name="edit" value="Edit" onclick="action(12345)"></td> 
 
    </tr> 
 
    </tbody> 
 
</table>

+0

Avez-vous corrigé la faute de frappe? Pourquoi es-tu confus? – bluehipy

+0

Oui, je l'ai fait. 'var $ élément = $ ('#' + id); $ title = $ ($ element, '[nom = titre]'); $ url = $ (élément $, '[name = url]'); $ BTN = $ (élément, '[type = bouton]'); isUpdate = (btn.attr $ ('value') = 'Edit'!); ' Cela ne fait rien. Cela ne montre aucune erreur mais je ne suis toujours pas capable d'obtenir ces valeurs. Je ne suis pas un pro chez jQuery/JS qui est pourquoi je suis confus –

+0

Il devrait y avoir certaines choses. 1. Indique-t-il 2 entrées en lecture seule et un bouton avec Edit? 2. En cliquant sur le bouton Modifier, vous pouvez modifier les entrées et modifier le texte du bouton de Modifier à Mettre à jour? 3. Cliquez sur le bouton pour relancer la lecture des inpuits et changer le texte du bouton pour le modifier. 4. Un appel ajax est-il effectué? – bluehipy