Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Ловить" вставку текста (событие) 
:(
    Опции темы
Wolf1994
Дата 3.8.2005, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



"Содрал" скрипт для подсчёта оставшихся символов для печати в "<textarea>": http://www.wolf-ware.ru/forum/topic1.html. Счётчик срабатывает только по событиям:
Код

 onkeypress=numchars2() onkeydown=numchars2() onkeyup=numchars2() onfocus=numchars2() onchange=numchars2()

Однако при вставке текста почему-то "onchange" не срабатывает. В справочнике ничего подходящего не нашёл, да и, думаю, что если бы это найти было просто - скрипт уже содержал бы событие.
PM MAIL WWW   Вверх
Sardar
Дата 3.8.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Угу, onchange появиться после потери фокуса, а вставку из буффера обмена просто так не отловишь(если это и возможно, то только под ИЕ). Выход: не заморачиваться и предупреждать пользователя в момент отправки формы, стандартная валидация smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Dave
Дата 5.8.2005, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 17.6.2004

Репутация: нет
Всего: 1



Ничего не пойму, в чем проблема ?
сходил по ссылке http://www.wolf-ware.ru/forum/topic1.html вставляю в ту textarea текст из буфера и там все прекрасно отлавливается, кол-во оставшихся символов при вставке пересчитывается правильно. Я так понял что проблема все таки с тем что не получается отловить момент вставки из буфера ? Так по той ссылке все отлавливается, Wolf1994, может ты скрипт выдрал неправильно ?

На всякий случай вот страничка с примером скрипта который делает то же самое, я тоже его выдрал : )
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Counter</title>
    <script TYPE="text/javascript" LANGUAGE="JavaScript">
    <!-- Dynamic Version by: Nannette Thacker -->
    <!-- http://www.shiningstar.net -->
    <!-- Original by :  Ronnie T. Moore -->
    <!-- Web Site:  The JavaScript Source -->
    <!-- Use one function for multiple text areas on a page -->
    <!-- Limit the number of characters per textarea -->
    <!-- Begin
    function textCounter(field,cntfield,maxlimit) {
        if (field.value.length > maxlimit) // if too long...trim it!
        field.value = field.value.substring(0, maxlimit);
        // otherwise, update 'characters left' counter
        else
        cntfield.value = maxlimit - field.value.length;
    }
    //  End -->
</script>
</head>
<body >

<br>
<table cellspacing="0" cellpadding="1" border="0" width="70%" align="center" bgcolor="#000000">
    <tr>
        <td valign="top">
<form action="" method="post">
<table cellspacing="5" cellpadding="5" border="0" width="100%" bgcolor="#ffffff">
    <tr>
        <td valign="top" align="right"><b>Enter your text here:</b><br><SMALL>Max of 315 characters,<br>including spaces.<br></SMALL></td>
        <td>
            <textarea id="adtext" name="adtext" cols="28" rows="5" onKeyDown="textCounter(document.getElementById('adtext'),document.getElementById('remLen1'),315)" onKeyUp="textCounter(document.getElementById('adtext'),document.getElementById('remLen1'),315)" onmouseout="textCounter(document.getElementById('adtext'),document.getElementById('remLen1'),315)"></textarea>
         <br>
            <input readonly type="text" id="remLen1" name="remLen1" size="3" maxlength="3" value="315">characters left
     </td>
    </tr>
    </table>
    </form>
</td>
</tr>
</table>
<br><br>

</body>

</html>

Скрипт работает в ИЕ, Мозилле, Опере, Нетскейп не проверял.
но в любом случае пхп проверку делать нужно.

Это сообщение отредактировал(а) Dave - 5.8.2005, 15:26
PM MAIL   Вверх
Wolf1994
Дата 5.8.2005, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Да. Я проверил: по "Ctrl+V"/"Shift+Ins" - отлавливает. Просто я проверял через мышь, из контекстного меню - "Вставить". Проблемы, скорее всего, нет. Просто решил спросить из академического интереса - вдруг получится сделать лучше...
Добавлено @ 12:05
Если уж говорить о теории, то вообще можно было бы поставить таймер и проверять постоянно изменение длины строки, это решит проблему - но это, imho, извращение smile

Это сообщение отредактировал(а) Wolf1994 - 5.8.2005, 12:07
PM MAIL WWW   Вверх
Dave
Дата 5.8.2005, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 17.6.2004

Репутация: нет
Всего: 1



Понятно, про вставку из контекстного меню я не подумал.
В этом случае моментально пересчитать символы не знаю как, но можно их пересчитать во время ближайшего onmouseout или onkeyup/onkeydown. Я добавил в исходник примера что я привел выше такую строчку:
Код

onmouseout="textCounter(document.getElementById('adtext'),document.getElementById('remLen1'),315)"

т.е. теперь символы пересчитываются при : onKeyUp, onKeyDown, onMouseOut.
onMouseOut я добавил чтобы в случае если символов больше чем положени то когда юзер потянется курсором к кнопке Submit то символы пересчитались бы. Второй вариант засабмитить форму это onkeydown: обработчик этого события уже есть.

PM MAIL   Вверх
Wolf1994
Дата 5.8.2005, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 5.10.2004

Репутация: 4
Всего: 29



Да, mouseout - это выход. Спасибо. Буду использовать.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0440 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.