renovations
This commit is contained in:
parent
9bf1b61cab
commit
0eec1aaccb
25 changed files with 68 additions and 64 deletions
|
@ -37,8 +37,6 @@ function getChar(event) {
|
|||
|
||||
if (navigator.platform.substr(0,3) != 'Mac') { // событие для CapsLock глючит под Mac
|
||||
document.onkeydown = function(e) {
|
||||
e = e || event;
|
||||
|
||||
if (e.keyCode == 20 && capsLockEnabled !== null) {
|
||||
capsLockEnabled = !capsLockEnabled;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
Отслеживаем события изменения для перевычисления результатов:
|
||||
<ul>
|
||||
<li>На `input`: событие `input` и дополнительно `propertychange/keyup` для совместимости со старыми IE.</li>
|
||||
<li>На `checkbox`: событие `click` вместо `change` для совместимости с IE<9.</li>
|
||||
<li>На `checkbox`: событие `click` вместо `change` для совместимости с IE8-.</li>
|
||||
<li>На `select`: событие `change`.</li>
|
||||
</ul>
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ moneyElem.onkeyup = calculate;
|
|||
// любые действия, кроме IE. В IE9 также работает, кроме удаления
|
||||
moneyElem.oninput = calculate;
|
||||
|
||||
moneyElem.onpropertychange = function() { // для IE<9 изменение значения, кроме удаления
|
||||
moneyElem.onpropertychange = function() { // для IE8- изменение значения, кроме удаления
|
||||
event.propertyName == "value" && calculate();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Изменение: change, input, propertychange
|
||||
# Изменение: change, input, cut, copy, paste
|
||||
|
||||
На элементах формы происходят события клавиатуры и мыши, но есть и несколько других, особенных событий.
|
||||
|
||||
|
@ -24,9 +24,33 @@
|
|||
Для того, чтобы видеть изменения `checkbox/radio` тут же -- в IE8- нужно повесить обработчик на событие `click` (оно произойдет и при изменении значения с клавиатуры) или воспользоваться событием `propertychange`, описанным далее.
|
||||
[/warn]
|
||||
|
||||
## Событие propertychange
|
||||
## Событие input
|
||||
|
||||
Это событие происходит только в старых IE, до версии 11, при любом изменении свойства. Оно позволяет отлавливать изменение тут же и используется, преимущественно, для исправления ошибок в старых IE.
|
||||
Событие `input` срабатывает *тут же* при изменении значения текстового элемента и поддерживается всеми браузерами, кроме IE8-.
|
||||
|
||||
В IE9 оно поддерживается частично, а именно -- *не возникает при удалении символов* (как и `onpropertychange`).
|
||||
|
||||
Пример использования (не работает в IE8-):
|
||||
|
||||
```html
|
||||
<!--+ autorun height=40 -->
|
||||
<input type="text"> oninput: <span id="result"></span>
|
||||
<script>
|
||||
var input = document.body.children[0];
|
||||
|
||||
input.oninput = function() {
|
||||
document.getElementById('result').innerHTML = input.value;
|
||||
};
|
||||
</script>
|
||||
```
|
||||
|
||||
В современных браузерах `oninput` -- самое главное событие для работы с элементом формы. Именно его, а не `keydown/keypress` следует использовать.
|
||||
|
||||
Если бы ещё не проблемы со старыми IE... Впрочем, их можно решить при помощи события `propertychange`.
|
||||
|
||||
## IE10-, событие propertychange
|
||||
|
||||
Это событие происходит только в IE10-, при любом изменении свойства. Оно позволяет отлавливать изменение тут же. Оно нестандартное, и его основная область использования -- исправление недочётов обработки событий в старых IE.
|
||||
|
||||
Если поставить его на `checkbox` в IE8-, то получится "правильное" событие `change`:
|
||||
|
||||
|
@ -55,27 +79,10 @@ if("onpropertychange" in checkbox) {
|
|||
</script>
|
||||
```
|
||||
|
||||
Это событие также срабатывает при изменении значения текстового элемента, но в IE9 у него ошибка: оно не срабатывает при удалении символов.
|
||||
Это событие также срабатывает при изменении значения текстового элемента. Поэтому его можно использовать в старых IE вместо `oninput`.
|
||||
|
||||
## Событие input
|
||||
К сожалению, в IE9 у него недочёт: оно не срабатывает при удалении символов. Поэтому сочетания `onpropertychange` + `oninput` недостаточно, чтобы поймать любое изменение поля в старых IE. Далее мы рассмотрим пример, как это можно сделать иначе.
|
||||
|
||||
Событие `input` срабатывает *тут же* при изменении значения текстового элемента и поддерживается всеми браузерами, кроме IE8-.
|
||||
|
||||
В IE9 оно поддерживается частично, а именно -- *не возникает при удалении символов* (как и `onpropertychange`).
|
||||
|
||||
Пример использования (не работает в IE8-):
|
||||
|
||||
```html
|
||||
<!--+ autorun height=40 -->
|
||||
<input type="text"> oninput: <span id="result"></span>
|
||||
<script>
|
||||
var input = document.body.children[0];
|
||||
|
||||
input.oninput = function() {
|
||||
document.getElementById('result').innerHTML = input.value;
|
||||
};
|
||||
</script>
|
||||
```
|
||||
|
||||
## События cut, copy, paste
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
Событие `submit` возникает при отправке формы. Наиболее частое его применение -- это *валидация* (проверка) формы перед отправкой.
|
||||
|
||||
Метод `submit` позволяет инициировать отправку формы из JavaScript, без участия пользователя. Далее мы рассмотрим их важные детали использования.
|
||||
Метод `submit` позволяет инициировать отправку формы из JavaScript, без участия пользователя. Далее мы рассмотрим детали их использования.
|
||||
[cut]
|
||||
## Событие submit
|
||||
|
||||
|
@ -15,9 +15,7 @@
|
|||
|
||||
Какой бы способ ни выбрал посетитель -- будет сгенерировано событие `submit`. Обработчик в нём может проверить данные и, если они неверны, то вывести ошибку и сделать `event.preventDefault()` -- тогда форма не отправится на сервер.
|
||||
|
||||
Посмотрим это на живом примере.
|
||||
|
||||
Оба способа выдадут сообщение, форма не будет отправлена:
|
||||
Например, в таком HTML оба способа выведут `alert`, форма не будет отправлена:
|
||||
|
||||
```html
|
||||
<!--+ autorun height=80 -->
|
||||
|
@ -37,7 +35,7 @@
|
|||
|
||||
[smart header="Взаимосвязь событий `submit` и `click`"]
|
||||
|
||||
**При отправке формы путём нажатия Enter на текстовом поле, на элементе `<input type="submit">` везде, кроме IE<9, генерируется событие `click`.**
|
||||
При отправке формы путём нажатия Enter на текстовом поле, на элементе `<input type="submit">` везде, кроме IE8-, генерируется событие `click`.
|
||||
|
||||
Это довольно забавно, учитывая что клика-то и не было.
|
||||
|
||||
|
@ -51,8 +49,8 @@
|
|||
|
||||
[/smart]
|
||||
|
||||
[warn header="В IE<9 событие `submit` не всплывает"]
|
||||
В IE<9 событие `submit` не всплывает. Впрочем, если вешать обработчик `submit` на сам элемент формы, без использования делегирования, то это не создаёт проблем.
|
||||
[warn header="В IE8- событие `submit` не всплывает"]
|
||||
В IE8- событие `submit` не всплывает. Впрочем, если вешать обработчик `submit` на сам элемент формы, без использования делегирования, то это не создаёт проблем.
|
||||
</li>
|
||||
</ul>
|
||||
[/warn]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue