Когда метод формы представлен непосредственно по вызову JS, событие отправки не отвечает. Почему? Если вы знаете, ответьте. Для аналогии я использовал input.select (), чтобы проверить его, но он смог ответить на событие Select. Давайте отпустим эту причину, давайте сначала посмотрим, как решить текущую проблему.
Пример кода, который не отвечает на события:
<form id = form1 action = http: //www.jb51com> </form>
<script type = text/javascript>
var form = document.getElementbyId ('form1');
form.onsubmit = function () {
предупреждение (1);
};
form.submit ();
</script>
В реальной работе ни одно предупреждение не выйдет.
Хотя использование метода отправки для подачи формы нарушает принцип ненавязчивого JavaScript, иногда вам приходится его использовать. Например, после выбора элемента вам необходимо использовать JS для отправки формы поиска.
2. Анализ проблемПоскольку само событие не отвечает, можно только запустить эти события вручную. Перед определением плана запуска ручного управления давайте рассмотрим метод регистрации события:
Есть два оригинальных метода регистрации, см. Пример кода:
<form id = form1 action = https: //www.vevb.com onsubmit = alert (1)> </form> <form id = form1 action = https: //www.vevb.com> </form>
<script type = text/javascript>
document.getElementById ('form1'). onSubmit = function () {
предупреждение (1);
}
</script>
Такое регистрационное событие добавит метод onsubmit для формы. Следовательно, можно напрямую выполнить этот метод, который эквивалентен рускому инициированию события вручную.
См. Пример кода:
<script type = text/javascript>
form.Onsubmit ();
</script>
Это дает вам предупреждение.
Тем не менее, расширенный метод регистрации стандартного DOM2 и метод регистрации IE ActadeEvent уже очень часто используются. Метод раздачи не существует в этих методах регистрации. Если Form.Onsubmit () используется, будет сообщена ошибка напрямую.
3. РешениеКонечно, сам метод расширенного регистрации также обеспечивает решение для ручного запуска событий, но ему нужно только написать различные программы для стандарта DOM2 и IE. Кроме того, эта программа также эффективна для исходного метода регистрации. См. Пример кода:
<script type = text/javascript>
// IE Fire Event
if (form.firevent) {
form.firevent ('onsubmit');
form.submit ();
// Dom2 Fire Event
} else if (document.createevent) {
var ev = document.createevent ('htmlevents');
ev.initevent ('отправить', false, true);
form.dispatchevent (ev);
}
</script>
4. Краткое изложение кодаЯ больше не буду объяснять детали здесь. Друзья, которые не знакомы с этим, пожалуйста, проверьте соответствующую информацию самостоятельно. Давайте объединим весь код вместе:
<! Doctype html public -// w3c // dtd html 4.01 // en http://www.w3.org/tr/html4/strict.dtd>
<html>
<голова>
<meta http-equiv = content-type content = text/html; charset = gbk>
<title> отправить </title>
<script type = text/javascript src = http: //k.kbcdn.com/js/yui/build/utilities/utilities.js> </script>
</head>
<тело>
<form id = form1 action = https: //www.vevb.com> </form>
<script type = text/javascript>
var form = document.getElementbyId ('form1');
// yui регистр событие
Yahoo.util.event.on ('form1', 'super', function () {
оповещение ('yui');
});
// Событие регистра DOM0
form.onsubmit = function () {
предупреждение (1);
};
// Событие регистра DOM2
if (form.addeventlistener) {
form.addeventlistener ('отправить', function () {
предупреждение (2);
}, ЛОЖЬ);
// т.е. событие регистрации
} else if (form.attachevent) {
form.attachevent ('onsubmit', function () {
предупреждение (2);
});
}
// IE Fire Event
if (form.firevent) {
form.firevent ('onsubmit');
form.submit ();
// Dom2 Fire Event
} else if (document.createevent) {
var ev = document.createevent ('htmlevents');
ev.initevent ('отправить', false, true);
form.dispatchevent (ev);
}
</script>
</body>
</html>
Есть небольшая проблема со всем пробежком. Под fx form.submit () не требуется. Я прямо отправил форму, поэтому это предложение также сохраняется. Пожалуйста, ответьте, если вы знаете причину.
Эта демонстрация была протестирована в рамках IE6/IE7/FX.