2011-10-31 70 views
3

需要幫助jQuery改變我的表單動作取決於提交按鈕按下。 我發現了一些JavaScript代碼,但它不工作。2x提交按鈕以採取行動不同的URL

<form name="myform" onsubmit="return onsubmitform();"> 

下面是函數

<script type="text/javascript"> 
    function submitform() 
    { 
     if(document.pressed == 'Save') 
     { 
       document.myform.action ="jbupdate.php"; 
     } else 
     if(document.pressed == 'Print') 
     { 
       document.myform.action ="ppage.php"; 
     } 
     return true; 
    } 
    </script> 

,這些都是我的提交按鈕

 <input type="submit" name="operation" onclick="document.pressed=this.value" value="Save" /> 
    <input type="submit" name="operation" onclick="document.pressed=this.value" value="Print" /> 

我會想發佈此信息取決於按下的按鈕,這些操作頁面。

回答

3

如果您查看JavaScript控制檯,當您嘗試提交表單時,會看到一條錯誤消息,告訴您有什麼錯誤的很大一部分:在您的表單的submit處理程序中,您試圖調用函數調用onsubmitform

<form name="myform" onsubmit="return onsubmitform();"> 
<!--         ^--- here  --> 

...但你的函數實際上是調用submitform

<script type="text/javascript"> 
function submitform() 
//  ^--- here 

如果你把這些名字相匹配,它可能會大多工作,雖然我不完全確定期望提交按鈕的click事件在表單的submit處理器之前觸發是完全可靠的跨瀏覽器。但是,我可能會做不同的事情。既然你說你正在使用jQuery,我會完全拋棄全局的submitform函數,添加一個隱藏的字段,並使按鈕只是按鈕(而不是提交按鈕),因爲除非啓用JavaScript,否則表單已經失效。

所以:

<input type="hidden" name="operation" value="" /> 
<input type="button" value="Save" /> 
<input type="button" value="Print" /> 

有:

jQuery(function($) { 
    var form = document.myform; 
    $(form).find("input[type='button']").click(function() { 
     form.operation = this.value; 
     form.action = this.value == 'Save' ? 'jbupdate.php' : 'ppage.php'; 
     form.submit(); 
     return false; 
    }); 
}); 
0
<form name="myform" onsubmit="return onsubmitform();"> 

你的函數名稱不是onsubmitform(),其submitform()

,如果你想發佈的數據,我建議你加上method =「post」

<form name="myform" onsubmit="return submitform();" method="post"> 

好運;)

2

以下JavaScript函數將目標頁面的URL,並通過動態地創建一個表格,然後提交它的名稱/值對和的POST數據以所提供的URL的關聯數組。

您可以使用而不是提交兩個輸入按鈕。點擊按鈕後,你可以mannualy將動作部分更改爲任何你想要的,然後提交。

var myForm = document.getElementById(formid); 
myForm.action = to-wherever-u-want ; 
myForm.submit() ; 

用不同的動作編寫兩個函數,或者編寫一個函數,確定哪個btn被按下。

你的腳本有一些類似你稱爲onsubmitform()的錯誤,但你只有在defenition中有sumitform()。請注意這一點。

1

下面的代碼可能是一個經過調整的版本將有所幫助。我添加了測試警報。

$('form[name="myform"] input[type="submit"]').click(function(event){ 
     var $form = $('form[name="myform"]'); 
     if($(this).val()=='Print'){ 
      alert('print was pressed') ; 
      $form.attr('action','jbupdate.php'); 
     } 
     else{ 
      alert('save was pressed') ; 
      $form.attr('action','ppage.php'); 
     } 
}); 

//I added the following code just to check if the click handlers are called 
//before the form submission, The alert correctly shows the proper value. 
$('form[name="myform"]').submit(function(event){ 
    alert("form action : " + $(this).attr('action')); 
    //event.preventDefault(); 
}); 

您可以在http://jsfiddle.net/ryan_s/v4FtD/

2

這裏用小提琴演奏另一種選擇:

<form action="ThisActionIsReplacedInTheButtonOnclickEvent" method="POST" Name="MyForm" target="_blank" > 
... 
<input type="submit" name="MyBtn" value="do it" OnClick="document.forms['MyForm'].action = 'Destination1.aspx'" > 
<input type="submit" name="MySecondBtn" value="do it different" OnClick="document.forms['MyForm'].action = 'Destination2.aspx'" > 

BTW,IE似乎並沒有太多像內聯JS,所以你可能要打破form.action賦值爲一個單獨的函數,如下所示:

<input type="submit" name="doitbtn" value="do it" OnClick="SetDest1()" /> 

    <SCRIPT LANGUAGE="JavaScript"> 
     function SetDest1() { 
      document.forms["MyForm"].action = "Destination1.aspx"; 
     } 

     function SetDest2() { 
      document.forms["MyForm"].action = "Destination2.aspx"; 
     } 

    </script> 
1

Mor e簡單地說:

<input type="submit" formaction="someaddress/whataver" value="Do X"/> 
<input type="submit" formaction="/another/address" value="Do Y"/>