[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с яваскриптом
TRIAL
Есть вот такой скриптик
Код
<textarea cols=30 rows=6 id=abc OnkeyPress="if (window.event.keyCode==13) {this.innerHTML+=';'}"></textarea>

В ИЕ как всегда всё работает, в других браузерах нет.
Смысл заключается в следующем. В текстовом поле набираем текст и при нажатии на ENTER ставиться ; и осуществляется переход на новую строчку.
Помогите преобразовать данный код под все браузеры.

Кстати есть среди присутствующих кто в яваскрипте нормально разбирается и с кем можно например по аське какие то мелочи обсуждать чтоб тут дурацкие темы не плодить? Впринцыпе не так часто обращаюсь к яве но щас вот разные мелочевки к движку прикручиваю и часто возникают вопросы. Если кто не против помогать скинте номер аськи в пм например :)



Спустя 11 минут, 35 секунд (28.04.2007 - 10:45) vasa_c написал(а):
window.event это IE-Only объект. В Gecko-браузерах он передается первым аргументом в обработчик.
для установки обработчика через JS его вычисляют так:
Код
element.onclick = (function(e) {
    e = e || window.event;
    ...
});

для inline обработчиков нужно вытаскивать через arguments
Код
onkeypress="var e = window.event || arguments[0]; if (e.keyCode...."

Спустя 13 минут, 15 секунд (28.04.2007 - 10:58) TRIAL написал(а):
Что-то inline всё равно не хочет в Опере работать, в ИЕ работает. но с небольшим глюком и моей недоработкой, хз.
Вобщем когда первый раз пишешь что-то и нажимаеш ентер то ставится ; и переходит на новую строчку, если еще что-нибудь ввести и нажать ентер, то второе значение со второй строки переползает на первую и т.д. в итоге они все выстраиваются друг за другом в таком виде: 1=2; 2=3; 3=4; 4=5;
Просто я в яве почти 0 и не знаю почти ничего, если можно то код кинте или описание как это сделать.
На данный момент прописано следущее:
Код
<textarea cols=30 rows=6 id=abc OnkeyPress="var e = window.event || arguments[0]; if (e.keyCode==13) {this.innerHTML+=';'}"></textarea>

Спустя 17 минут, 59 секунд (28.04.2007 - 11:16) vasa_c написал(а):
Код
<textarea cols="30" rows="6" id="abc"></textarea>
<script type="text/javascript">
    document.getElementById("abc").onkeypress = (
        function(e)
        {
            e = e || window.event;
            if (e.keyCode != 13) {
                return true;
            }
            
            this.value += ";";
            
            return true;
            
        });
</script>

Оперы сечас нет, но в IE и FF работает

Спустя 1 час, 20 минут, 34 секунды (28.04.2007 - 12:37) TRIAL написал(а):
Сново спасибо и сново небольшой глюк в Опере.
Там все заработало только немного не в той последовательности, т.е. сперва срабатывает переход на новую строку и только потом ставится ;
Как можно подправить? :)
Извиняюсь за такие дурацкие вопросы :)

Кстати еще такой вопросик. Есть поля для ввода текста. Как инлаин вывести кол-во символов в этой строке? Просто прописал на событие кнопки, всё работает но только после того как делаешь какие либо изменения в поле, думал может onLoad() сработает, но он тож не хочет :)

Спустя 10 минут, 19 секунд (28.04.2007 - 12:47) vasa_c написал(а):
Код
Сново спасибо и сново небольшой глюк в Опере.

В Опере да, события через задницу работают. Сначала по-умолчанию, потом обработчики.
Видимо, придется проверять, вставлен ли уже в конец текста \n, и записывать ";" перед ним.

Спустя 20 минут, 14 секунд (28.04.2007 - 13:07) TRIAL написал(а):
Перепробывал все варианты с \n и \r, ничего не работает. Уже и return false ставил но в этом случае не могу перевести указатель на новую строчку. Вобщем хз как чего делать, походу пока придется от этой мелкой приятности отказаться.

PS. Вот за это я и ненавижу javascript. Вечно он глючит и работает черт знает как.

Спустя 12 минут, 40 секунд (28.04.2007 - 13:20) vasa_c написал(а):
Если уметь с ней обращаться, она работает отлично.
Даже в опере smile.gif

Спустя 18 минут, 17 секунд (28.04.2007 - 13:38) TRIAL написал(а):
Да это понятно, не спорю, просто руки не доходят до него :)

Спустя 8 дней, 2 часа, 51 минута, 20 секунд (6.05.2007 - 16:30) AKS написал(а):
Сегодня на досуге "убил" эту проблему в Opera8+ вот таким "костылем":

Код
<textarea cols='30' rows='6' id='ebc'></textarea>

<script type='text/javascript'>

document.getElementById('ebc').onkeydown = semicolonInsertion;

function semicolonInsertion(e) {
    e = e || window.event;
    if (e.keyCode != 13) {
        return true;
    }
    if (!window.opera) {
        this.value += ';';
    } else if (window.opera.version
            && window.opera.version() >= 8) {
        var v = this.value,
            f = this.selectionEnd,
            o = v.slice(0, f - 2),
            s = v.slice(f - 1),
            c = o.charAt(o.length - 1) === '\u003B'
                ? '' : '\u003B';
        this.value = o + c + s;
        this.selectionStart = o.length + 3;
        e.preventDefault();
    }
    return true;
}
</script>

Спустя 31 минута, 59 секунд (6.05.2007 - 17:02) vasa_c написал(а):
Отлично!
В опере теперь даже лучше чем в других smile.gif
А чего не хватает более ранним Операм?

Спустя 25 минут (6.05.2007 - 17:27) AKS написал(а):
Цитата(vasa_c @ 6.5.2007, 20:02) [snapback]19877[/snapback]
А чего не хватает более ранним Операм?

Я отредактировал пред. сообщение - оказалось, что и в 8-ых версиях тоже работает (я сначала "уцепился" только за девятку, а потом открыл в восьмых и удивился smile.gif ). Заметил, правда, одну странность, но думаю автор темы с ней разберется.
А вот в Opera7 надо как-то реплейсить содержимое поля (пока не сделал)...


_____________
from TRIAL with LOVE
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.