2012-02-02 2 views
0
<tr> 
    <td> 
     <b>Escalation: 
    </td></b> 
    <td> 
     <TextArea name='escalation' onKeyDown=\"limitText(this.form.escalation,this.form.countdown,100);\"  
onKeyUp=\"limitText(this.form.escalation,this.form.countdown,100);\">$Text</textarea>You have <input readonly type=\"text\" name=\"countdown\" size=\"3\" value=\"100\"> characters left. 
    </td> 
</tr> 

Это выдержка из кода, который я пытаюсь использовать. В основном я пытаюсь заполнить текстовую область значением, хранящимся в переменной php, которая поступает из базы данных SQL. функции Javascript ограничивают количество текста в блоке до 100 символов.Промежуточные пробелы при использовании <textarea>

Проблема в том, что она заполняет любое пространство, которое не используется в начальном значении с пробелами! Я напечатал $ Text между двумя кавычками, поэтому я бы знал, что у него нет пробелов в базе данных, чего нет. Вы также можете ясно видеть, что у меня нет никакого пространства между тегами textarea, так что это не проблема, которую я вижу в других плакатах.

Любые идеи?

+2

Большинство шансов заключается в том, что проблема заключается в limitText() – alfasin

+0

. Почему бы вам просто не обрезать значение, когда оно передано в javascript или передается? –

+0

Действительно, если появляются пробелы, это функция 'limitText()', которая их помещает туда - нам нужно увидеть код javascript. – DaveRandom

ответ

1

Да, я видел это поведение раньше. Проверьте, есть ли столбец, в котором вы читаете значение из базы данных, типа «CHAR» или типа «VARCHAR». Более эффективно всегда использовать типы полей с фиксированной длиной (CHAR) по переменной длине (VARCHAR), поэтому базы данных иногда проектируются таким образом. Нижняя сторона заключается в том, что более короткие данные, хранящиеся в этих полях, всегда заполняются пробелами.

Решение: Вы, вероятно, имеют строку в PHP, который выглядит примерно так:

$Text = $row['text']; 

Изменение этой строке следующее:

$Text = trim($row['text']); 

«облицовку» функция будет раздеться ведущий и конечные пробелы. Если вы используете поля фиксированной длины, помните, что вам нужно заполнить значения, которые вы пишете в базе данных. Это означает, что вам нужно будет добавить ведущие пробелы в строку, которая будет записана в базу данных, чтобы сделать правильную длину для поля фиксированной ширины.

+0

S B! Вот и все! Благодаря! Что касается записи его обратно в БД: всякий раз, когда я писал в базу данных раньше, мне никогда не приходилось делать это, хотя ... Зачем мне их заполнять? его varchar – user1186164

+0

Вам нужно заполнить значения, потому что типы полей в базе данных CHAR, а не VARCHAR. Если у вас есть поле типа VARCHAR (5), оно может содержать до 5 символов. Если у вас есть тип поля CHAR (5), то он ДОЛЖЕН быть ровно 5 символами. Таким образом, хотя поле VARCHAR может быть присвоено значение «автомобиль», поле CHAR (5) должно иметь значение «автомобиль». Итак, зачем кому-то использовать фиксированный тип поля CHAR, а не VARCHAR? Очень просто. Если ВСЕ ваши поля имеют фиксированный размер, записи имеют фиксированную длину, и это более эффективно. Но переменная длина проста в использовании. –

+0

Ahhh, если поле является VARCHAR, значения, возможно, были сохранены с ведущими пробелами. Вы всегда должны использовать строки TRIM, прежде чем записывать их в БД. –

Смежные вопросы