Как я могу вызвать событие по умолчанию для элемента в обработчике событий? - PullRequest
1 голос
/ 21 октября 2011

У меня есть кнопка 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 не вызывается.

Условное разрешение события по умолчанию - лучшее решение, которое я придумал, но есть несколько вариантов, которые могут быть возможны:

  1. Есть ли другой способ вызватьСлушатель Tapestry 4 будет запущен из Javascript?
  2. Можно ли как-нибудь распознать обычную форму, отправленную на моей странице гобелена, и тем самым вызвать слушателя?

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 говорит, что это нужно сделать.

Ответы [ 3 ]

1 голос
/ 22 октября 2011

Если все условия выполнены, я удаляю прослушиватель щелчков с кнопки и нажмите кнопку еще раз:

Не.

Вам лучше проверить условия в обработчике кликов и вызвать stopEvent там так:

Ext.get('send').on('click', handleClick);

function handleClick(e) {
    if (condition) {
        e.stopEvent();
    }
}
0 голосов
/ 24 октября 2011

Параметр listener имеется для Form компонентов; из Гобелен 4 документа :

Прослушиватель по умолчанию, который вызывается при отправке формы. Вызванный только если другой слушатель (успех, отмена или обновление) не вызван.

Установка этого параметра для моего метода слушателя так:

<binding name="listener" value="listener:doSend" />

вызывает отправку формы Гобелена

tapestry.form.submit('myFormId');

, чтобы вызвать слушателя.

0 голосов
/ 22 октября 2011

Internet Explorer не поддерживает клики. Вы должны использовать метод fireEvent, например,

Ext.getDom('send').fireEvent('onclick');

Это должно работать для IE. Для других браузеров, я думаю, щелчок в порядке. В любом случае, если мне придется выполнить аналогичную задачу, я постараюсь написать адаптер для гобелена и использовать библиотеку JavaScript гобеленов.

...