2012-03-12 78 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