2012-03-12 49 views
1

这是一个JavaScript问题。JavaScript提交

考虑下面的代码:

<input type="button" name="applyFilter" value="Apply Filter" onClick="doSubmit('applyFilter')"/> 


function doSubmit(action) { 
f=document.forms[0]; 
f.action=action; 
f.submit(); 
} 

我怎样才能获取该按钮的表单对象中doSubmit点击()?目前,您可以看到对表单[0]的引用,但我希望这可以在页面上使用多个表单,并且我不想传入表单名称/标识/引用或按钮对象引用。该按钮位于表单上,我希望doSubmit(action)函数可以获取该表单对象。

+0

是你传递给'doSubmit()'不知何故唯一不同形式的字符串?如果没有,因为你说过你不会做类似'onclick =“doSubmit('applyFilter',this);'我没有看到你如何获得表单 - 因为它代表'doSubmit()'函数甚至没有对按钮的引用,因此如何确定哪个窗体与它不知道的按钮有关?(在IE中,您可以使用'window.event'来获取细节,但不能在其他浏览器中) – nnnnnn 2012-03-12 02:44:09

+0

@nnnnnn我知道这可能是不可能的,但我仍然想问,而不是假设。 – jacekn 2012-03-12 02:55:22

+0

如果您无法更改标记,我认为不能完成。你可以改变标记有很多可能的解决方案 - 如果你坚持使用内联处理程序,甚至可以完全通过将按钮更改为'type =“submit”'然后使用'onclick'来完全抛弃'doSubmit()'函数=“this.form.action ='applyFilter';”'。) – nnnnnn 2012-03-12 03:28:28

回答

0

也许你可以尝试'泡沫'的事件。我的意思是你可以使用event.target或event.srcElement。

+0

这就要求OP从监听器传递相关的事件对象,如果监听器是动态连接的或者如果调用被修改的话,这可以完成。但是如果调用被修改(OP不想做),那么按钮或表单也可以直接传递。 – RobG 2012-03-13 03:00:08

1

如果动态附加侦听器,则可以使用相关的事件对象。除此之外,没有办法以跨浏览器的方式来做它(IE有window.event,但这不是W3C兼容的,或者是很多常用浏览器都支持的)。

0

使用jQuery

$('input[type="button"]').on('click',function(){ 
    $(this).parents('form').submit();   
})​ 

http://jsfiddle.net/uM4c2/1/

+0

也许你应该再次读到这个问题:OP不想改变现有'doSubmit()'函数的签名。 – nnnnnn 2012-03-12 02:48:43

+0

函数的主体相当于'this.form.submit()',它的效率更高,输入更少。而不是OP想要的。如果是这样,它可以直接从内联监听器完成。 – RobG 2012-03-12 02:53:18