yura3d |
Отправлено: 12 июля 2010 — 13:11
|
ExBB Team ExBB Developer ExBB Mods Author
Покинул форум
Сообщений всего: 3394
Дата рег-ции: Февр. 2009
Откуда: Минск, Беларусь
Репутация: 353
|
Александр Михалицын пишет:Событие как ставишь? attachEvent/addEventListener?
По правде говоря, у меня реализовано несколько проще. Если немного углубиться в подробности, то есть некоторый span, который доступен для редактирования пользователями (атрибут contentEditable):
CODE:<span contentEditable="true" onKeyDown="mykeydown(event);">Тут текст</span>
Далее следует фунция-обработчик:
CODE:function mykeydown(event) {
if (!event) event = window.event;
if (event.keyCode == 13)
event.returnValue = false;
}
Этот способ работает в IE (по крайней мере в 6-ой его версии)
Проблема в том, что при редактировании текста в span'е в случае нажатия Enter, происходит полная ерунда. IE6 начинает заключать строки в теги <p></p>, в результате чего осуществляется переход не на одну, а на две строки (мне же нужен <br>). В Опере 9 span'ы почему-то начинают размножаться с каждым нажатием Enter. В Опере 10 похожая ситуация
Задача в том, чтобы перехватывать нажатие Enter и не позволять исполняться родительским обработчикам, которые творят эту ерунду. Достаточно будет лишь в дочернем обработчике добавить <br> в span (например, посредством innerHTML)
Сейчас ещё подумал. Ведь текст может быть вставлен и из буфера обмена, и при этом в нём могут быть переходы на новую строку. Видимо, весь алгоритм нужно свести к такой последовательности: сначала получаем обновлённый текст, выполняем необходимые преобразования, а затем отправляем его стандартным обработчикам |
|
|
shyuser |
Отправлено: 16 марта 2011 — 09:27
|
Member
Покинул форум
Сообщений всего: 111
Дата рег-ции: Июль 2009
Откуда: Лукоянов, Нижегородская область, Россия
Репутация: 16
|
vipraskrutka, возможно так:
CODE:<html>
<head>
<title>Простая страница</title>
<script language="JavaScript">
<!-- Маскируемся!
function calcArea()
{
$n = prompt (" Введите число" , " Введите число") ;
$m=$n/100;
if ($m<1)
{
$m=1;
}
else
{
if ($m>100)
{
$m=100;
};
};
$m=Math.round($m)+Math.round($n);
alert($m);
}
// Снимаем маскировку. -->
</script>
</head>
<body>
Щелкните <input type="button" value="ЗДЕСЬ" onClick="calcArea()"> чтобы вычислить!
</body>
</html> (Отредактировано автором: 16 марта 2011 — 09:35) |
|
|
shyuser |
Отправлено: 24 мая 2011 — 15:56
|
Member
Покинул форум
Сообщений всего: 111
Дата рег-ции: Июль 2009
Откуда: Лукоянов, Нижегородская область, Россия
Репутация: 16
|
bruno, в javascript, да и вообще в web-программировании, я тоже слабоват
Не претендую на оптимальность и правильность, но что-то такое:
CODE:<script type="text/javascript">
function proverka(input) {
var value = input.value;
var rep = /[-\.;":'a-zA-Zа-яА-Я]/;
for (var i=0; i<=input.value.length; i++) {
value = value.replace(rep, '');
}
input.value = value;
}
</script>
<input type="text" onkeyup="return proverka(this);">
P.S. Думаю, что в rep невозможно все символы запретные указать, и здесь скорее нужно отталкиваться от того какие можно и те, что не подходят, удалять.
(Добавление)
Вероятно, так проще, добавил опцию глобального поиска:
CODE: <script type="text/javascript">
function proverka(input) {
var value = input.value;
var rep = /[-\.;":'a-zA-Zа-яА-Я]/g;
input.value = value.replace(rep, '');
}
</script>
<input type="text" onkeyup="return proverka(this);"> |
|
|
|