web-dev-qa-db-fra.com

Pourquoi textarea est-il rempli d'espaces blancs mystérieux?

J'ai un simple zone de texte sous une forme comme celle-ci:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink">
    <?php if($siteLink_val) echo $siteLink_val; ?> 
</textarea>

Je continue à avoir des espaces blancs supplémentaires dans cette textarea. Quand j'insère dedans, mon curseur est comme au milieu de la textarea et pas au début? Quelle est l'explication?

228
Afamee

Regardez attentivement votre code. Il contient déjà trois sauts de ligne et une tonne d'espaces avant le </textarea>. Supprimez-les en premier afin qu'il n'y ait plus de sauts de ligne entre les balises. Cela pourrait déjà faire l'affaire.

396
Pekka 웃

Tout ce qui est entre <textarea> et </textarea> est utilisé comme valeur par défaut pour votre zone de texte. Il y a quelques espaces dans votre exemple. Essayez d'éliminer tout cela.

55
amarillion

Ouvrez (et fermez!) Vos balises PHP juste après et avant vos balises textarea:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php
  if($siteLink_val) echo $siteLink_val;
?></textarea>
46
Bart Kiers

Fondamentalement, il devrait être

<textarea>something here with no spaces in the begining</textarea>

S'il y a des espaces prédéfinis, disons en raison du formatage du code comme ci-dessous

<textarea>.......
....some_variable
</textarea>

Les espaces indiqués par des points continuent d’être ajoutés à chaque soumission.

23
beebek

En bref: <textarea> devrait être fermé immédiatement sur la même ligne où il avait commencé.


Médecine générale: ceci ajoutera les sauts de ligne et les espaces utilisés pour l'indentation dans le code.

<textarea id="sitelink" name="sitelink">
</textarea>

Pratique correcte

<textarea id="sitelink" name="sitelink"></textarea>
18
pega wega

Tout espace entre les balises d'ouverture et de fermeture de textarea sera considéré comme un espace. Donc, pour votre code ci-dessus, la manière correcte sera:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo $siteLink_val; ?></textarea>
7
Gyan

Une autre solution consiste à utiliser JavaScript:

//jquery
$('textarea#someid').html($('textarea#someid').html().trim());

//without jquery
document.getElementById('someid').innerHTML = document.getElementById('someid').innerHTML.trim();

C'est ce que j'ai fait. En supprimant les espaces et les sauts de ligne dans le code, la ligne est trop longue.

7
Milad.Nozari

Pour que cela paraisse un peu plus propre, envisagez d’utiliser l’opérateur ternaire:

<textarea><?=( $siteLink_val ? $siteLink_val : '' );?></textarea>
4
Brian Lacy
<textarea style="width:350px; 
 height:80px;" cols="42" rows="5" name="sitelink"
 ><?php if($siteLink_val) echo $siteLink_val; ?></textarea> 

Bouger ...> ça marche pour moi. 

2
User707

Assurez-vous qu'il n'y a pas de saut de ligne ni d'espace après, mais bien de copier et coller ce code :)

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo trim($siteLink_val);?></textarea>
2
kinta mahadji

Je sais que c'est tard, mais je peux aider les autres.

utilisez-le lorsque l'indentation du document est requise.

$('document').ready(function()
{
    $('textarea').each(function(){
            $(this).val($(this).val().trim());
        }
    );
});

meme question

2
Er Jagdish Patel

Une solution qui a fonctionné pour moi consiste à ajouter le style white-space: normal; à la zone de texte car il est parfois impossible d'éliminer tous les espaces (par exemple, lorsque vous souhaitez que votre code respecte les consignes de codage, ce qui nécessite l'ajout d'onglets, d'espaces et de sauts de ligne. )

Veuillez noter que la valeur par défaut pour textarea, du moins en chrome, est: white-space: pre-wrap;

1
Taranjeet Singh

La zone de texte affiche des espaces mystérieux car il existe un espace réel dans les balises. <textarea> <php? echo $var; ?> </textarea> Après avoir supprimé ces espaces supplémentaires entre les balises, le problème sera résolu comme suit <textarea><php? echo $var; ?></textarea> 

1
Ashfaq Jan

Je suis contre le code HTML mélangé avec du code PHP.

Cependant essayez ceci:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink">
<?php 
    if($siteLink_val) 
        echo trim($siteLink_val);
?> 
</textarea>
1
streetparade

Assurez-vous d'abord que votre $ siteLink_val ne renvoie pas d'espace blanc sous forme de valeur. L'élément <textarea> par défaut a une valeur vide. Par conséquent, si la variable que vous voulez répercuter pour une raison quelconque a des espaces, votre problème se pose dès le départ. 

Pour que le code soit le plus pur possible, je vous suggérerais de faire quelque chose comme ceci, permettant ainsi une plus grande flexibilité par la suite. J'ai créé une fonction qui renvoie NULL si la variable n'est pas présente (ce que vous semblez viser dans le message d'origine) et la valeur absolue sinon. Une fois que vous vous êtes assuré du contenu de votre variable, essayez ceci:

function build_siteLink_val() {
     if ( $siteLink_val ) {
          return $siteLink_val;
     }

     else {
          return "";
     }
}

$output_siteLink_val = build_siteLink_val();

Et le code suivant dans votre zone de texte se lirait maintenant:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?=$output_siteLink_val?></textarea>

En supposant que votre installation PHP soit configurée pour les appels de variable abrégés, comme indiqué dans les balises "<? =?>" Abrégées. Si vous ne pouvez pas utiliser cette méthode, n'oubliez pas de faire précéder votre code PHP de "<? Php" et de le fermer par "?>". 

Évitez les sauts de ligne entre les <textarea>, car cela pourrait créer des caractères erronés. 

En outre, vérifiez votre code CSS pour vous assurer qu’aucune règle de remplissage ne pousse le texte vers l’intérieur.

En outre, vous spécifiez une valeur de colonnes et de lignes dans la zone de texte, puis définissez un style de largeur et de hauteur. Ces règles sont contre-productives et entraîneront des effets visuels incohérents. Tenez-vous en pour définir la taille en fonction du style (je recommande de donner une classe à l'élément) ou les lignes/colonnes.

0
dmanexe

J'ai le même problème et la solution est très simple: ne commencez pas une nouvelle ligne! Bien que certaines des réponses précédentes puissent résoudre le problème, l’idée n’est pas clairement énoncée. La compréhension est importante: pour vous débarrasser des espaces non souhaités, ne commencez jamais une nouvelle ligne juste après votre balise de début. Ce qui suit laissera beaucoup d'espaces non désirés avant le contenu de votre texte:

 <textarea>
    text content // start with a new line will leave a lot of unwanted spaces
 </textarea>

La bonne façon de le faire est:

 <textarea>text content //put text content right after your start tag, no new line
 </textarea>
0
William Hou

Si vous préférez utiliser l'indentation, faites-le après avoir ouvert la balise <?php, comme suit:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php // <--- newline
    if($siteLink_val) echo $siteLink_val; // <--- indented, newline
?></textarea>
0
Kemal

Il suffit de définir votre et votre balise proche dans la même ligne.

<textarea class="form-control"
          id="newText"
          rows="6"
          placeholder="Your placeholder here..."
          required
          name="newText"></textarea>
0
Enderson Menezes

De plus, la balise textarea montre les espaces pour les nouvelles lignes, les onglets, etc., dans du code multiligne.

0
Gal Margalit

De plus, quand vous dites que le curseur est au "milieu" de la zone de texte, cela me fait penser que vous pourriez aussi avoir un remplissage supplémentaire ou text-align: center défini quelque part dans votre CSS.

0
Brian Lacy

conserve le code textarea sans espaces blancs supplémentaires à l'intérieur

de plus, si vous voyez des lignes vides supplémentaires .__, il existe une solution en méta-langage:

<textarea>
for line in lines:
echo line.replace('\n','\r')
endfor
</textarea>

il imprimera des lignes sans lignes vides supplémentaires Bien sûr, cela dépend si vos lignes se terminent par '\ n', '\ r\n' ou '' - veuillez adapter

0
Sławomir Lenart