2010-04-24 8 views
2

** EDIT --- Essayer une version encore plus simplifiée .... Ne fonctionne toujours pas ... Renvoie $ (this) .closest n'est pas une erreur de fonction ... **jquery ajouter une ligne onclick

$("#fitable input[name^=f1]").focus(function() { 
     var newRow = '<tr><td></td><td></td><td></td><td></td></tr>'; 
     $(this).closest("tbody").append(newRow); 
    }); 

original post

assez nouveau pour jQuery, je suis en espérant que quelqu'un peut me aider ... il y a deux ou trois choses qui se passent ici ... aide avec une partie de celui-ci est apprécié .

Pour commencer, j'essaie d'ajouter une ligne à une table lorsqu'un utilisateur clique dans le premier champ de saisie activé pour cette ligne. Voici le code que je suis en train d'utiliser:

$("#fitable > tbody > tr > td > input").bind('focus', function() { 
     if($(this).attr('disabled', false)) { 
      $(this).click(function() { 
        var newRow = '<tr><td><input name="f1[]" value="" /><label>CustNew</label></td><td><input name="field_n1[]" value="" /><label>N1</label></td><td><input name="field_n2[]" value="" /><label>N2</label></td></tr>'; 
        $(this).closest("tbody").append(newRow); 
      }); 
     } 
    }); 

S'il est utile, voici le code html:

<table id="fitable"> 
    <tbody> 
     <tr valign="top"> 
      <td><input disabled="disabled" name="cust" id="edit-cust" value="[email protected]" type="text"><label>Cust</label></td> 
      <td><input name="field_n1[]" value="" type="text"><label>N1</label></td> 
      <td><input name="field_n2[]" value="" type="text"><label>N2</label></td> 
     </tr> 
    </tbody> 
</table> 
+0

essayez de remplacer les placards avec les parents – hookedonwinter

+1

ou '$ (this) .parents (" tbody: first "). Append (newRow);' –

+0

Qu'est-ce que @ [Jim Schubert] a dit aussi! – hookedonwinter

Répondre

0

Je pense que votre sélection est incorrect. Essayez ceci:

$("#fitable > tr td input:enabled:first").focus(function() { 
    var newRow = '<tr><td><input name="f1[]" value="" /><label>CustNew</label></td><td><input name="field_n1[]" value="" /><label>N1</label></td><td><input name="field_n2[]" value="" /><label>N2</label></td></tr>'; 
    $(this).parents("tbody:first").append(newRow); 
}); 

Vous ne devez pas vérifier désactivé sur la fonction de gestionnaire, car cela ne se lie aux éléments activés en premier lieu.

1

Je pense que votre instruction if définissant l'attribut cliqué sur false. Essayez ceci:

if($(this).attr('disabled') == false) { 
    // do stuff 
} 
+0

Merci. J'ai essayé cela, malheureusement, le même comportement ... comme si rien ne se passait ... Voyez-vous autre chose que cela pourrait être? – BigDogsBarking

+0

dans l'instruction if, ajoutez console.log ('if'); ou quelque chose .. juste pour tester que vous êtes en train d'entrer dans cette déclaration. Ensuite, ouvrez votre console et vérifiez le journal. Ou, si vous ne voulez pas utiliser la console, alertez ('if'); à la place de console.log ... laissez-nous savoir ce qui se passe – hookedonwinter

+0

alerte (« si ») apparaît, donc je sais que je suis au bon endroit ... J'ai modifié mon code pour le rendre encore plus simple, et il est pas encore ... Aller à annexant éditer mon message original en seulement une seconde pour que vous puissiez voir la dernière révision ... – BigDogsBarking

0

Essayez ceci:

$("#fitable input").focus(function() { 
     if($(this).attr('disabled', false)) { 
      $(this).click(function() { 
        var newRow = '<tr><td><input name="f1[]" value="" /><label>CustNew</label></td><td><input name="field_n1[]" value="" /><label>N1</label></td><td><input name="field_n2[]" value="" /><label>N2</label></td></tr>'; 
        $(this).closest("tbody").append(newRow); 
      }); 
     } 
    }); 
+0

Essayer ce renvoie une erreur: $ (ce) .closest n'est pas une fonction ... (?) – BigDogsBarking

Questions connexes