2010-10-29 12 views
0

Comment enregistrer la valeur de INPUT dans la variable pour ne pas écrire beaucoup de code en double?Comment enregistrer la valeur de INPUT dans une variable?

comme var entrée = $ (this) .val();

pleine example

<div id="form"> 
    1. <input type="text" value="title" /> 
    2. <input type="text" value="value" /> 
</div> 

$(function(){ 
    $('#form input:eq(0)').bind({ 
    focus: function(){ 
     if($(this).val()=='title'){ 
      $(this).val(''); 
     } 
    }, 
    blur: function(){ 
     if($(this).val() == ''){ 
      $(this).val('title'); 
     } 
    } 
    }); 

    $('#form input:eq(1)').bind({ 
    focus: function(){ 
     if($(this).val()=='value'){ 
     $(this).val(''); 
     } 
    }, 
    blur: function(){ 
     if($(this).val() == ''){ 
      $(this).val('value'); 
     } 
    } 
    }); 
}); 

Répondre

2

Voici ma solution. Je travaillerais à un domaine qui a class = "set-default"

Commander le working example

Voici le code:

$(function(){ 
    $('.set-default').bind({ 
    focus: function(){ 
     if(typeof($(this).data('def')) == 'undefined'){ 
       $(this).data('def', this.value) 
     } 
     if(this.value == $(this).data('def')){ 
      this.value = ''; 
     } 
    }, 
    blur: function(){ 
     if(this.value == ''){ 
      this.value = $(this).data('def'); 
     } 
    } 
    }) 
}); 

essentiellement tous les domaines qui avaient la classe par défaut définie agira comme vous voulez. Vous pouvez toujours changer le sélecteur en $ ('# form input') mais je pense que ce n'est pas utile.

HTH

+0

Merci, presque ce que je voulais – Algorithm

+0

Ne pas comparer avec 'undefined' - utiliser' typeof', ne pas créer d'attributs personnalisés - utiliser '.data()', ne pas envelopper * tout * dans jQuery '$() 'quand vous pouvez utiliser le DOM à la place. –

+0

@Yi Jiang - tout à fait raison! re factorisé le code selon les meilleures pratiques :) –

3

Je ne suis pas sûr de ce que vous demandez, mais ce refactoring travaillerez pour basculer la valeur. EDIT: ajout attribut par défaut aux éléments html et raccourcie jQuery (toujours lisible bien) http://jsfiddle.net/UmZeZ/

<div id="form"> 
    1. <input type="text" value="title" default="title" /> 
    2. <input type="text" value="value" default="value" /> 
</div> 


$(function() { 
    $('#form input').bind('focus blur', function() { 
     var value = $(this).attr('default'); 
     if ($(this).attr('value') == value) { 
      $(this).attr('value', ''); 
     } else if ($(this).attr('value') === '') { 
      $(this).attr('value', value); 
     } 
    }); 
}); 
+0

Je refactorisé à nouveau, cette fois l'édition des éléments d'entrée et de combiner les liaisons. Je pense que c'est aussi court que vous allez obtenir tout en étant encore lisible. – Scott

3

Pour accomplir ce que vous voulez, je vous suggère d'utiliser l'attribut HTML5 placeholder. Avec Modernizr, nous pouvons détecter le support du navigateur pour cette fonctionnalité, et avec ce simple morceau de code, nous pouvons le faire fonctionner même pour les navigateurs qui ne supportent pas placeholder.

if(!Modernizr.input.placeholder){ 
    var input = $('input[type="text"]'); 

    input.focus(function(){ 
     if(this.value === this.getAttribute('placeHolder')) this.value = ''; 
    }).blur(function(){ 
     if(this.value === '') this.value = this.getAttribute('placeHolder'); 
    }).blur(); 
} 

Voir une démonstration en direct de cette ici: http://www.jsfiddle.net/yijiang/cTDsL/1

+0

votre code ne fonctionne que si l'utilisateur ne va pas à nouveau dans ce domaine. S'il retourne le champ se vide à nouveau, mais ce n'est pas utile. Aussi pourquoi vous devez vous fier à HTML5 alors que jQuery (comme vous l'avez dit) fournit la fonction .data(). Si l'utilisateur travaille avec un navigateur sans HTML5, votre solution ne fonctionnera pas. –

+0

@Nik Droite, fixe. Cela fonctionne peu importe si HTML5 est utilisé et supporté ou non. Il n'y a aucune raison pour que HTML5 ne soit pas utilisé dès que les navigateurs les supportent. –

Questions connexes