Я работаю над сценарием отслеживания для довольно сложной CRM для отслеживания действий формы в Google Analytics. Я пытаюсь сбалансировать желание точно отслеживать действия формы с потребность , чтобы форма не работала.
Теперь я знаю, что что-то подобное не работает.
$('form').submit(function(){
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]);
});
DOM выгружается до того, как у этого есть шанс обработать.
Итак, большой пример кода рекомендует что-то вроде этого:
$('form').submit(function(e){
e.preventDefault();
var form = this;
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]);
//...do some other tracking stuff...
setTimeout(function(){
form.submit();
}, 400);
});
Это достоверно в большинстве случаев , но это заставляет меня нервничать. Что если что-то случится между e.preventDefault();
и когда мне удастся запустить отправку на основе DOM? Я полностью сломал форму.
Я копался в некоторых других аналитических реализациях и заметил что-то вроде этого :
$('form').mousedown(function(){
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]);
});
$('form').keydown(function(e){
if(e.which===13) //if the keydown is the enter key
_gaq.push(['_trackEvent', 'Form', 'Submit', $(this).attr('action')]);
});
По сути, вместо прерывания отправки формы, выгрузив ее, предполагая, что если кто-то нажмет или нажмет Enter, то эта форма будет отправлена. Очевидно, это приведет к определенному количеству ложных срабатываний, но это полностью исключает использование e.preventDefault();
, что, по моему мнению, исключает риск того, что я когда-либо смогу помешать успешной отправке формы.
Итак, мой вопрос:
- Можно ли взять стандарт
отследить фрагмент кода и предотвратить его
с когда-либо полностью предотвращая форму
от отправки?
-
Жизнеспособная альтернатива mousedown / keydown?
- Есть ли какие-либо случаи представления, которые он может пропустить? В частности, существуют ли другие способы отправки в дополнение к вводу с помощью мыши и клавиатуры? И всегда ли у браузера будет время обработать javascript перед тем, как начать выгружать страницу?