Код
<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 его вычисляют так:
для inline обработчиков нужно вытаскивать через arguments
для установки обработчика через JS его вычисляют так:
Код
element.onclick = (function(e) {
e = e || window.event;
...
});
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 и не знаю почти ничего, если можно то код кинте или описание как это сделать.
На данный момент прописано следущее:
Вобщем когда первый раз пишешь что-то и нажимаеш ентер то ставится ; и переходит на новую строчку, если еще что-нибудь ввести и нажать ентер, то второе значение со второй строки переползает на первую и т.д. в итоге они все выстраиваются друг за другом в таком виде: 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>
<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() сработает, но он тож не хочет :)
Там все заработало только немного не в той последовательности, т.е. сперва срабатывает переход на новую строку и только потом ставится ;
Как можно подправить? :)
Извиняюсь за такие дурацкие вопросы :)
Кстати еще такой вопросик. Есть поля для ввода текста. Как инлаин вывести кол-во символов в этой строке? Просто прописал на событие кнопки, всё работает но только после того как делаешь какие либо изменения в поле, думал может 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. Вечно он глючит и работает черт знает как.
PS. Вот за это я и ненавижу javascript. Вечно он глючит и работает черт знает как.
Спустя 12 минут, 40 секунд (28.04.2007 - 13:20) vasa_c написал(а):
Если уметь с ней обращаться, она работает отлично.
Даже в опере
Даже в опере
Спустя 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>
<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 написал(а):
Отлично!
В опере теперь даже лучше чем в других
А чего не хватает более ранним Операм?
В опере теперь даже лучше чем в других
А чего не хватает более ранним Операм?
Спустя 25 минут (6.05.2007 - 17:27) AKS написал(а):
Цитата(vasa_c @ 6.5.2007, 20:02) [snapback]19877[/snapback]
А чего не хватает более ранним Операм?
Я отредактировал пред. сообщение - оказалось, что и в 8-ых версиях тоже работает (я сначала "уцепился" только за девятку, а потом открыл в восьмых и удивился ). Заметил, правда, одну странность, но думаю автор темы с ней разберется.
А вот в Opera7 надо как-то реплейсить содержимое поля (пока не сделал)...
_____________
from TRIAL with LOVE