2012-09-21 3 views
2

J'ai du mal à trouver les valeurs de la zone de texte dans mon contrôle de répéteur. En cliquant sur le bouton, je dois obtenir une valeur de zone de texte correspondant à la zone de texte qui se trouve à l'intérieur du bouton sur lequel on clique.Trouver le contrôle dans le répéteur dynamiquement avec Jquery

j'ai donc:

Textbox1 ---> qui doivent être liés avec Button1 TextBox2 ----> qui est lié à Bouton2

<span>Question :</span><span>my second content <br /></span><span>Answer : </span><input name="ctl00$MainContent$ctl00$ctl00$TextArea" type="text" id="MainContent_ctl00_TextArea_0" value="6454" /> 

Ajouter une question


Question: abcdedf
Réponse: Ajouter une question

En ce moment j'ai jquery fonction qui obtiennent whic h est cliqué:

$(".addAnswerButton").click(function() { 

     //var quantityBox = $("#TextArea", $(this).parent()); 
     var tr = $(this).closest("text") 
     alert(tr.val()); 
     //quantityBox.text = "Hello there"; 
     //var currentValue = quantityBox.val(); 
     $(this).siblings('input[type="text"]').first().val("clicked"); 

     //quantityBox.val(parseInt(currentValue) + 1); 
    }); 

Ive a obtenu fonctionner partiellement:

$(this).siblings('input[type="text"]').first().val("clicked"); 

où je reçois le texte mis textbox, mais là encore, si je clique second bouton, rien happends.

Qu'est-ce que je fais de mal? Comment puis-je obtenir de la valeur à partir d'une zone de texte spécifique?

MISE À JOUR

maintenant je vais avec une solution où j'ajoute attribut personnalisé à chaque contrôle:

<span>Question :</span> 
<span>my second content <br /></span> 
<span>Answer : </span> 
<input name="ctl00$MainContent$ctl00$ctl00$TextArea" type="text" id="MainContent_ctl00_TextArea_0" value="654" mydataid="2" /> 

    <button id="MainContent_ctl00_answerQuestion_0" Class="addAnswerButton" onclick="Click()" mydataid="2" >Add Question</button><hr /><span>Question :</span><span>abcdedf <br /></span> 

    <span>Answer : </span><input name="ctl00$MainContent$ctl00$ctl01$TextArea" type="text" mydataid="1" id="MainContent_ctl00_TextArea_1" value="654" /> 

    <button id="MainContent_ctl00_answerQuestion_1" Class="addAnswerButton" onclick="Click()" mydataid="1">Add Question</button>​ 

Donc maintenant je peux obtenir la coutume atribute de l'événement onclick en faisant ceci:

$(".addAnswerButton").click(function() { 
    var pos = $(this).attr("mydataid"); 
    alert(pos); 
// $(this).siblings('input[type="text"]').first().val("clicked"); 
}); 

Mais comment puis-je obtenir le contrôle de la zone de texte avec le nom d'attribut personnalisé samme en tant que bouton?

Mise à jour 2

Après 70 tryes je fini par comprendre (mes premiers tryes avec Jquery)

solution

$(".addAnswerButton").click(function() { 
    var pos = $(this).attr("mydataid"); 
    results = $('input[type = "text"][mydataid="'+pos+'"]').first(); 
    alert(results.val()); 
}); 

donc point est, vous obtenez des attributs personnalisés "nom", puis recherchez une zone de texte avec le même nom d'attribut.

+0

Pouvez-vous montrer votre structure html? sont-ils tous frères et soeurs ou seulement frères et soeurs de l'élément relatif? –

+0

Pouvez-vous créer un js violon avec le html et le jquery que vous avez? Ça va aider les charges lorsque vous essayez de le déboguer. – Burt

+0

fiddler: http://jsfiddle.net/TcSWV/17/ – Timsen

Répondre

2

Vous pouvez les marquer à partir du serveur avec certains attributs et les utiliser dans votre code jQuery.

La sortie du serveur serait comme ceci:

<input type='text' data-item-id='1'>First</input> 
<inpyt type='button' data-item-id='1'></input> 

<input type='text' data-item-id='2'>Second</input> 
    <inpyt type='button' data-item-id='2'></input> 

Après qu'une fois le bouton est pressé, obtenir ses données-item-id et recherche de zone de texte avec la même valeur d'attribut.

+0

Je charge le répéteur de manière dynamique à partir du code behinde, pouvez-vous montrer comment ajouter un ID de données? – Timsen

+0

compris, vous m'a guidé dans la bonne direction. – Timsen

1

Édité après les commentaires.

Je me dirige vers votre jsFiddle et le faire fonctionner avec ceci:

$('[id*="answerQuestion"]').click(function() { 
    $(this).parent().children('[id*="TextArea_' + $(this).attr('id').substring($(this).attr('id').length - 1) + '"]').val('clicked'); 
}); 

Explication:

  1. Je me rends compte que vos ids où answerQuestion pour les boutons et TextArea pour le txt.
  2. Dans la fonction i fait un sélecteur qui travaille avec l'identifiant TextArea (la sous-chaîne ajoute l'indice à elle)

Ca y est! C'est un peu compliqué mais c'est la meilleure solution que j'ai trouvée.

Espérons que cela aide! Salutations, désolé s'il y a quelques incohérences anglais :)!

+0

je ne peux pas le faire de cette façon, car les ID sont dynamiques – Timsen

Questions connexes