我正在编写一个用自定义按钮替换文档中所有input type="button"
和input type="submit"
的类,这实际上是一个填充在锚标签内的跨度,我已经写完了所有内容,并且它除了使用javascript提交表单时未触发内联onsubmit
事件,所有工作都有效。
实际上,甚至写一个静态锚标记
<a href="javascript:void(0)" onclick="document.FORMNAME.submit();">Submit</a>
不会为表单触发内联onsubmit
事件,但<input type="submit" />
会触发事件...无论如何必须有一种方法可以使用javascript触发此onsubmit事件。
以下是我正在使用的内容片段:
click: function() {
//get parent form
var thisForm = this.getParent('form');
//fire onsubmit event
thisForm.fireEvent('submit'); //this doesnt work!
//submit form...the event isn't fired here either!
thisForm.submit();
}
有人有什么想法吗?这个类需要不需要配置,并且有一些旧网站使用我们想要插入的cms系统,并且在我们需要考虑的表单上有很多内联提交事件
由于
UPDATE,
我接受了这个建议并提出了这个建议:
if(this.getParent().onsubmit()) {
this.getParent().submit();
}
完美地用于评估onsubmit事件中的表单并根据其输出提交表单,但如果该函数根本不存在该怎么办?有什么想法吗?
答案 0 :(得分:1)
在表单上触发submit
不会触发它的内联onSubmit
,这是默认的javascript行为(找到:http://www.codestore.net/store.nsf/unid/DOMM-4QS3RL/)
你可以尝试自己调用onsubmit
,这对我有用:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/mootools/1.3.1/mootools-yui-compressed.js"></script>
<script type="text/javascript" charset="utf-8">
window.addEvent('domready', function(e) {
$$('span.submit').each(function(el) {
el.addEvent('click', function(e) {
this.getParent().onsubmit();
});
});
});
</script>
</head>
<body>
<form method="post" onsubmit="alert('hi');" class="form">
<input type="text" value="test" />
<span class="submit">Submit the form</span>
</form>
</body>
</html>
答案 1 :(得分:0)
您可能希望尝试使用此代码,因为它会检查onsubmit事件是否已作为事件侦听器附加,而不是作为硬编码属性。如果事件作为监听器附加,则[表单元素] .onsubmit()部分将不起作用。
function myOnSubmit(formId){
var f = document.getElementById(formId);
if(document.createEvent){
var e = document.createEvent('Event');
e.initEvent('submit',true,false);
f.dispatchEvent(e);
} elseif(document.createEventObject){
var e = document.createEventObject('Event');
e.button = 1;
f.fireEvent('onsubmit',e);
} elseif(typeof(f.onsubmit) == 'function'){
f.onsubmit();
}
}