Javascript 覆盖表单 onsubmit 事件不起作用
Javascript override form onsubmit event not working
我正在重写这样的表单提交事件:
form.onsubmit = function(event) {
event.preventDefault();
但是当我在一个单独的函数中像这样在表单上调用提交时:
form.submit();
未调用 onsubmit 函数,照常发布表单。
有什么想法吗?
编辑:
我也在这个表单中创建一个文件输入并立即调用它的点击事件。这会影响表单提交事件吗?:
if (fileInput && document.createEvent)
{
var evt = document.createEvent('MouseEvents');
evt.initEvent('click', true, false);
fileInput.dispatchEvent(evt);
}
编辑#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();
}
}
要防止表单发布您的函数,必须 return false。
form.onsubmit = function(event) {
event.preventDefault();
return false;
}
试试这个
form.submit = function() {
//event.preventDefault(); No need of this call
//do your processing here
}
关注@garryp 对“return false”的回答。进一步阅读 MDN event.stopImmediatePropagation 以了解一些用例以及 event.preventDefault 和 event.stopPropagation 之间的差异。
旁注,“return 错误;”与调用两者相同;
event.preventDefault();
event.stopPropagation();
希望对您有所帮助。
正如 Manish 指出的那样,在 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();
}
}
我正在重写这样的表单提交事件:
form.onsubmit = function(event) {
event.preventDefault();
但是当我在一个单独的函数中像这样在表单上调用提交时:
form.submit();
未调用 onsubmit 函数,照常发布表单。
有什么想法吗?
编辑:
我也在这个表单中创建一个文件输入并立即调用它的点击事件。这会影响表单提交事件吗?:
if (fileInput && document.createEvent)
{
var evt = document.createEvent('MouseEvents');
evt.initEvent('click', true, false);
fileInput.dispatchEvent(evt);
}
编辑#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();
}
}
要防止表单发布您的函数,必须 return false。
form.onsubmit = function(event) {
event.preventDefault();
return false;
}
试试这个
form.submit = function() {
//event.preventDefault(); No need of this call
//do your processing here
}
关注@garryp 对“return false”的回答。进一步阅读 MDN event.stopImmediatePropagation 以了解一些用例以及 event.preventDefault 和 event.stopPropagation 之间的差异。
旁注,“return 错误;”与调用两者相同;
event.preventDefault();
event.stopPropagation();
希望对您有所帮助。
正如 Manish 指出的那样,在 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();
}
}