2010-07-26 5 views
0

J'ai un élément <textarea> dans ma forme qui a ce code attaché à lui:hauteur de réglage de la zone de texte basé sur le texte à l'intérieur de celui-ci en utilisant jQuery

$('#links').focusin(function() { 
    $('#links').animate({ 
     height: '100px' 
    }, 300, function() { 
     // done 
    }); 
}); 

Cela fonctionne parfaitement, lorsque la zone de texte se focaliser augmente bien en hauteur à 100px. Maintenant, je veux qu'il rétrécisse à une taille appropriée basée sur le texte à l'intérieur quand il perd le focus. J'ai écrit ceci:

$('#links').focusout(function() { 
    $('#links').animate({ 
     height: 'auto' 
    }, 300, function() { 
     // done 
    }); 
}); 

Mais cela ne fonctionne pas, il reste juste à la même hauteur (100px). Est-ce qu'il y a un moyen de faire ça?

Merci. :)

Éditer: Pour sauver une certaine confusion, le même gestionnaire pour $('#links').focusout fonctionne très bien, c'est la première chose que j'ai testé. Donc je suppose que c'est un problème avec l'animation ou la propriété CSS.

+0

presque double de cette question: http://stackoverflow.com/questions/3173381/jquery-auto-grow-text-area-versus-initial-text/3174705#3174705 – Mottie

Répondre

0

Essayez $('#links').blur(function(){ ... }) à la place

http://api.jquery.com/blur/


Modifier, votre code actuel:

$('#links').blur(function() { 
$('#links').animate({ 
    height: 'auto' 
}, 300, function() { 
    // done 
}); 
}); 

D'autres notes .. Vous pouvez utiliser $ ('#links') .focus() au lieu de focusin, et aussi, une fois que vous êtes dans la fonction, vous pouvez utiliser $ (this) .animate(), un s un raccourci. Juste de petites astuces et autres joyeusetés.

+0

Désolé , J'aurais dû mieux expliquer. Il n'y a rien de mal avec le même gestionnaire, cela fonctionne bien car je peux le tester en ajoutant une alerte. Le problème semble être avec l'animation ou la propriété CSS. À moins qu'il y ait un avantage à utiliser 'flou' sur' focusout'? – Prupper

+0

oh gotchya. Essayez une hauteur différente, juste pour tester. Réglez-le sur 300px ou quelque chose juste pour vous assurer qu'il fonctionne réellement? – hookedonwinter

+0

Bonne idée, ça fonctionne avec une valeur statique comme '20px', ça doit être l'attribut' auto' que je suis en train de paramétrer. – Prupper

0
auto_height_link = $('#links').css('height'); 
$('#links').focusin(function() { 
    $(this).animate({ 
     height: '100px' 
    }, 300, function() { 
     // done 
    }); 
}).focusout(function() { 
    $(this).animate({ 
     height: auto_height_link 
    }, 300, function() { 
     // done 
    }); 
}); 

mais de toute façon le Animer ne marche pas lire la valeur auto css pour la hauteur

je suis tombé sur ce http://www.unwrongest.com/projects/elastic/ qui est ce que vous avez besoin, je suppose

0

Vous ne pouvez pas utiliser l'animation automatique dans jQuery. Vous devriez le régler sur auto, puis obtenir la hauteur réelle (en px) et enfin l'animer.

Jetez un oeil here

Questions connexes