2015-06-12 125 views
1

我有許多表單的頁面,每個表單可能有多個提交按鈕,每個按鈕都有一些由html指定的操作「onclick」。使用特定按鈕提交表格

我已經創建處理程序onclick通過jquery提交按鈕,防止默認操作和做一些工作,但然後我需要提交此表單。如果我只是模擬點擊按鈕 - 觸發所有行動onclick再次工作。

有關它的任何想法?

摘要代碼示例:

<form> 
    <input type='submit' name='first_button' onclick='doSomething()'> 
    <input type='submit' name='second_button' onclick='doSomethingElse()'> 
<form> 
+0

ü可以發佈您的代碼? – Ghostman

+0

爲每個表單添加特定和唯一的id,並且與jQuery相比,當您聽取點擊時,提交需要使用$('#mysecondform')提交的表單。 –

+0

如果你有每個'submit'的'onclick'發送'form id'作爲參數並提交那個'form'! –

回答

-1

爲什麼提交這份表格?您可以進行Ajax調用並將所有數據發送到服務器,然後重新加載頁面(或者用它做任何你想做的事情);

$.ajax({ 
     url: "your url", 
     type: "POST/GET", 
     data: your data, 
    }).done(function() { 
     location.reload(); 
    }).fail(function (err) { 
     location.reload(); 
     alert(err.statusText); 
    }); 

或者乾脆試試這個:

function OnSubmit(e){ 
    e.preventDefault(); 
    some code here... 

    $(this).off('submit', on_submit_function); 
    $(this).submit(); 
} 

$('form').on('submit', OnSubmit); 
+0

有很多代碼和頁面(超過20k字符串)。所以我試圖以某種方式創建通用事件處理程序,該代碼不會受到影響。 – Supervision

+0

更新了我的答案 – Fabjan

0

就叫referenceToFormElement.submit()

由於您的提交按鈕沒有值,因此您無法關心服務器是否知道哪個被點擊,因此在使用JS提交表單時繞過它們會很好。

document.querySelector("[name=first_button]").addEventListener('click', doSomething); 
 
document.querySelector("[name=second_button]").addEventListener('click', doSomethingElse); 
 

 
function doSomething(e) { 
 
    var button = this; 
 
    e.preventDefault(); 
 
    setTimeout(function() { 
 
    alert("Submitting A!"); 
 
    button.form.submit(); 
 
    }, 1000); 
 
} 
 

 
function doSomethingElse(e) { 
 
    var button = this; 
 
    e.preventDefault(); 
 
    setTimeout(function() { 
 
    alert("Submitting B!"); 
 
    button.form.submit(); 
 
    }, 1000); 
 
}
<form> 
 
    <input type='submit' name='first_button'> 
 
    <input type='submit' name='second_button'> 
 
</form> 
 

 
<p>(NB: This won't actually submit because it is on Stackoverflow: Blocked form submission to 'http://stacksnippets.net/js' because the form's frame is sandboxed and the 'allow-forms' permission is not set.)