У меня есть кнопка HTML, которая должна проверить несколько условий, и если они пройдут, разрешить действие по умолчанию.
Следующее работает в Firefox, но не работает в IE.Я установил обработчик щелчка на кнопке:
Ext.get('send').on('click', handleSend, this, {
preventDefault: true
});
, который открывает одно из нескольких окон сообщения, если одно из условий не выполнено.Если все условия соблюдены, я удаляю прослушиватель щелчков с кнопки и снова нажимаю на кнопку:
Ext.get('send').un('click', handleSend, this);
Ext.getDom('send').click();
Насколько я могу судить, в IE (и, возможно, в других браузерах) происходит сбой, потому что click ()не является стандартной функцией для элемента DOM.
Если действие по умолчанию было отправкой простой формы, я мог бы просто сделать это после прохождения проверок, но мы используем Tapestry 4 со слушателем, который нене выполняется при обычной отправке формы.
Я пытался отправить форму с
tapestry.form.submit('composeForm', 'doSend');
, но прослушиватель doSend
не вызывается.
Условное разрешение события по умолчанию - лучшее решение, которое я придумал, но есть несколько вариантов, которые могут быть возможны:
- Есть ли другой способ вызватьСлушатель Tapestry 4 будет запущен из Javascript?
- Можно ли как-нибудь распознать обычную форму, отправленную на моей странице гобелена, и тем самым вызвать слушателя?
JSFiddle добавлено
В этом jsfiddle действием по умолчанию является отправка формы;это предотвращается, когда флажок снят.Если флажок установлен, он удаляет обработчик, но вызов click () не работает в IE.
Есть ли способ имитировать щелчок в IE?
Обновление
Еще одна проблема в том, что мне нужно отобразить 'Вы уверены 'диалог, поэтому, чтобы дать им время ответить, событие должно быть остановлено.Если они нажимают OK, действие по умолчанию должно произойти.JSFiddle, похоже, не имеет виджетов ExtJS, таких как MessageBox, поэтому я не уверен, как продемонстрировать это поведение.
По предложению @ Ivan я попытался
Ext.getDom('send').fireEvent('onclick');
, но он возвращает false,это означает, что событие где-то отменяется.Затем я попытался
var evt = document.createEvent("Event");
evt.initEvent('click', false, false);
var cancelled = Ext.getDom('send').fireEvent('onclick', evt);
, но IE9 говорит, что document.createEvent не существует, хотя MSDN говорит, что это нужно сделать.