2015-04-30 2 views
2

Я переопределение формы представить событие, как это:Javascript переопределения формы onsubmit событие не работает

form.onsubmit = function(event) { 
    event.preventDefault(); 

Но когда я звоню представить в форме, как это в отдельной функции:

form.submit(); 

функция onsubmit не вызывается, а форма и форма отправляются как обычно.

Любые мысли?

Edit:

Я также создает входной файл в этой форме и сразу же вызвав щелчок событие. Будет ли это повлиять на форму отправить событие ?:

if (fileInput && document.createEvent) 
{ 
    var evt = document.createEvent('MouseEvents'); 
    evt.initEvent('click', true, false); 
    fileInput.dispatchEvent(evt); 
} 

Edit # 2:

Я подаю форму, вызвав представить функцию форме после того, как значение входного файла изменилось:

function nameFileLabel(id) 
{ 
    var f = document.getElementById('fileForm' + id); 
    var l = document.getElementById("fileText_" + id); 
    var i = document.getElementById("fInputId" + id); 
    if (i.value != '') 
    { 
     l.innerHTML = i.value.replace('fakepath', '...'); 
     var theUploadForm = document.getElementById('fileDiv_' + id); 
     theUploadForm.style.visibility = 'visible'; 
     theUploadForm.style.display = 'block'; 
     f.submit(); 
    } 
} 
+0

вы также можете попробовать onClick = "function_name" в своем теге формы html. – syms

+0

что я вижу теперь в вашем отредактированном коде, который вы публикуете в форме через javascript. И, таким образом, onsubmit не вызван. Причина проста, что браузер думает, что вы отправляете свою форму через код, так что вы уже сделали предварительную обработку перед вызовом метода отправки. Итак, IMO, прежде чем вы вызываете оператор f.submit(), вы должны вызывать все остальные методы, которые вы хотите выполнить перед отправкой формы. –

+0

Маниш, см. Мое решение ниже. Вы были на правильном пути. Спасибо за вашу помощь. :-) – Xavi

ответ

1

Как указал Маниш, переопределение функции отправки и вызов формы отправки в javascript осложняли распространение события. Поэтому добавлена ​​скрытая кнопка в форму в javascript и называется функцией нажатия кнопки, а не функцией отправки формы. Похоже, что он работал, даже это похоже на клод! Большое спасибо всем вам за вашу оперативную помощь. :-)

function nameFileLabel(id) 
{ 
    var f = document.getElementById('fileForm' + id); 
    var l = document.getElementById('fileText_' + id); 
    var i = document.getElementById('fInputId' + id); 
    var b = document.getElementById('sub' + id); 
    if (i.value != '') 
    { 
     l.innerHTML = i.value.replace('fakepath', '...'); 
     var theUploadForm = document.getElementById('fileDiv_' + id); 
     theUploadForm.style.visibility = 'visible'; 
     theUploadForm.style.display = 'block'; 
     b.click(); 
    } 
} 
3

Чтобы предотвратить отправку формы, ваша функция должна вернуть значение false.

form.onsubmit = function(event) { 
    event.preventDefault(); 
    return false; 
} 
+0

Это не сработало. Кроме того, я добавил предупреждение перед этим, которое не похоже на его вызванное. – Xavi

+0

Попробуйте заменить form.submit ... с document.getElementById ('form1'). Onsubmit ... и добавьте id = "form1" в ваш тег формы в HTML. – garryp

+0

garryP, я не думаю, что это сработает, поскольку я динамически создаю форму в javascript, и она не будет существовать в DOM в момент добавления функции onsubmit. – Xavi

-1

Попробуйте с этим одним

form.submit = function() { 
    //event.preventDefault();  No need of this call 
    //do your processing here 
} 
+0

Скобка не проблема, она просто была пропущена пользователем, задающим этот вопрос. –

+0

Я изменил имя функции. –

+0

Я не видел этого изменения. Было бы лучше отметить это в вашем комментарии, что вы на самом деле изменили, что, по вашему мнению, решает проблему. Однако .submit не является событием, связанным с формой, как описано в http://www.w3schools.com/jsref/event_onsubmit.asp –

0

Следуя @ garryp Ответим на "возвращение ложным". Чтобы добавить дальше, прочитайте из MDN event.stopImmediatePropagation, чтобы увидеть различия и использовать случай между event.preventDefault и event.stopPropagation.

На боковой ноте «return false»; это то же самое, что и оба;

event.preventDefault(); 
    event.stopPropagation(); 

Надеюсь, это поможет.

+0

stopPropagation также не работает. Я не думаю, что функция называется вообще. – Xavi

+0

hmm, попробуйте использовать точку останова в инструментах браузера dev, т. Е. firebug или хром. Я также попробую добавить «console.log ('submited'); + другие переменные часов. Наконец, понимая концепцию событий и то, как она пузырится. В принципе, preventDefault() останавливает действие по умолчанию от запуска, stopPropagation не позволит ему перебирать DOM, но другие в пределах области действия будут триггером. Наконец, stopImmediatePropogation .. останавливает все это. – daxeh

Смежные вопросы