2009-05-17 10 views
1

Comme vous pouvez le voir sur http://jsbin.com/erivi/ J'utilise Jquery pour changer une image (et un attribut d'image) en fonction du bouton radio sélectionné, je supprime également le texte du formulaire lorsque je clique dessus.Comment changer le titre de certaines entrées de texte en fonction d'une radio avec jquery?

Et maintenant, ce que j'essaie de faire est de changer le texte du formulaire en fonction du bouton radio coché.

Par exemple en cliquant sur "Choix 3" nous devrions voir "Texte de l'entrée 3".

Vous pouvez voir & modifier mon code en direct ici: http://jsbin.com/erivi/edit

La partie que je dois améliorer est:

imgFldr = 'http://download.kde.org/khotnewstuff/icons/previews/'; 
$("input[type='radio']").click(function() { 
    var strarr = this.title.split('|'); 
    if(strarr.length < 2) return; 
    $('#'+this.name).attr('src', imgFldr+strarr[0]).attr('alt', strarr[1]).attr('title', starr[2]); 
}); 

Et surtout .attr('title', starr[2]); qui est censé changer le titre en fonction de la 3e partie de mon titre de la radio (exemple: title='m602-1.png|Logo 3|Text of input 3')

Merci :)

Edit: J'ai oublié de mentionner que j'utilise plusieurs formulaires sur mon code réel, c'est pourquoi je cherche un moyen de le faire sans le nom particulier de la saisie de texte afin d'éviter de répéter le script pour d'autres saisies de texte.

Répondre

2

EDIT: L'id de la zone de texte d'entrée doit être unique. De plus, vous devez définir .attr('title',strarr[2]), .val(strarr[2]) et la classe d'indication dans l'événement click du bouton radio. Des modifications doivent également être apportées à votre plugin inputdynvalue.

S'il vous plaît voir le code de travail complet mis à jour à http://jsbin.com/akawo

Mise à jour du plug-in Code

(function($) { 
    $.fn.inputdynvalue = function (options) { 
     var opts = $.extend({}, $.fn.inputdynvalue.defaults, options); 
     return this.each(function(){ 
      var hvalue = opts.htext; 
      switch (opts.htext) { 
       case 'title' : hvalue = $(this).attr('title'); break; 
       case 'value' : hvalue = $(this).attr('value'); break; 
      } 
      $(this).attr('value', hvalue).addClass(opts.hclass) 
      .unbind('focus blur') 
      .bind('focus', function() {      
       if (this.value === this.title) { 
        this.value = ''; 
        $(this).removeClass(opts.hclass); 
       } 
      }) 
      .bind('blur', function() { 
       if (this.value === '') { 
        this.value = this.title; 
        $(this).addClass(opts.hclass); 
       } 
      }); 
     }); 
    }; 
    $.fn.inputdynvalue.defaults = { 
     htext: 'title', 
     hclass: 'hint' 
    }; 
})(jQuery); 
$(document).ready(function(){ 
    $("input[type='text']").inputdynvalue(); 
}); 

Mise à jour Bouton Radio Cliquez sur Gestionnaire d'événements

$("input[type='radio']").click(function() { 
    var strarr = this.title.split('|'); 
    if(strarr.length < 2) return; 
    $('#'+this.name).attr('src', imgFldr+strarr[0]).attr('alt', strarr[1]); 
    $('#'+this.name+'_text') 
     .attr('title',strarr[2]) 
     .val(strarr[2]) 
     .addClass('hint'); 
}); 
+0

Salut! Merci pour votre réponse, mais il ya toujours le même problème avec votre code, il change le texte lorsque vous cliquez sur le bouton radio, mais lorsque vous cliquez à l'intérieur du formulaire, il supprime uniquement le texte lorsque le premier bouton radio est sélectionné. Lorsque "Choix 2" est sélectionné si vous cliquez à l'intérieur du formulaire, le texte n'est pas supprimé. Cela a quelque chose à voir avec mon script inputdynvalue sur le code source. – Mark

+0

Mark - J'ai mis à jour mon message. Le code de travail complet est à http://jsbin.com/akawo –

+0

Merci beaucoup c'est exactement ce que je cherchais! :-) – Mark

1

Essayez ceci:

<form method="post" action=""> 
    <div> 
     <img id="iymok" src="http://download.kde.org/khotnewstuff/icons/previews/m732-1.png" alt="Alt by default" /> 
     <input type="text" id="iymok_text" title="Blablabla Text 1" /> 
     <label><input type="radio" checked="checked" name="iymok" title="m133-1.png|Logo 1|Blablabla Text 1" />Choice 1</label> 
     <label><input type="radio" name="iymok" title='m203-1.png|Logo 2|Text of input 2' />Choice 2</label> 
     <label><input type="radio" name="iymok" title='m602-1.png|Logo 3|Text of input 3' />Choice 3</label> 
    </div> 
</form> 
<script type="text/javascript"> 
    imgFldr = 'http://download.kde.org/khotnewstuff/icons/previews/'; 
    $("input[type='radio']").click(function() { 
     var strarr = this.title.split('|'); 
     if (strarr.length >= 3) { 
       $('#'+this.name).attr('src', imgFldr+strarr[0]).attr('alt', strarr[1]).attr('title', strarr[2]); 
       $('#'+this.name+'_text').attr('title', strarr[2]); 
     } 
    }); 
</script> 
+0

Il ne semble pas pour travailler plus j'ai oublié de mentionner que j'utilise plusieurs formes sur mon vrai code, ainsi est le re toute autre façon de le faire sans dire le nom de l'entrée de texte? – Mark

+1

Ah, fixé! Rappelez-vous que l'attribut 'id' doit être unique. Vous ne devriez pas avoir plusieurs éléments sur une page avec le même identifiant. – Tyson

+0

Presque parfait, il suffit juste de supprimer le texte en cliquant dessus, et de le retourner en cliquant en dehors du formulaire (et de remettre le texte en fonction du bouton radio sélectionné) comme cela fonctionne pour le choix 1 mais pas pour 2 autres. – Mark

Questions connexes