2011-03-19 57 views
23

我當前的代碼如下:如何使用JavaScript來改變表單的動作

<div class="fr_search"> 
    <form action="/" accept-charset="UTF-8" method="post" id="search-theme-form"> 
    ....... 
    </form> 
</div> 

現在我想編寫一個函數來改變表單的動作和方法,當條件滿足。我如何編寫此代碼?

例如,

function test() { 
    if (selectedIndex === 1).... 
} // How do I write this code? 

回答

26
function chgAction(action_name) 
{ 
    if(action_name=="aaa") { 
     document.search-theme-form.action = "/AAA"; 
    } 
    else if(action_name=="bbb") { 
     document.search-theme-form.action = "/BBB"; 
    } 
    else if(action_name=="ccc") { 
     document.search-theme-form.action = "/CCC"; 
    } 
} 

和表單需要有name就是這種情況

<form action="/" accept-charset="UTF-8" method="post" name="search-theme-form" id="search-theme-form"> 
+4

我想你的意思是'document ['search-theme-form']','document.search 「主題形式」實際上不起作用。 – 2012-09-12 21:46:13

+0

您可能需要定義不帶連字符的表單名稱 – hop 2013-07-11 14:43:54

1

如果你使用jQuery,它是如此簡單:

$('form').attr('action', 'myNewActionTarget.html'); 
+5

請記住,這將更改頁面上的所有表單。 – labue 2011-03-19 11:35:29

+0

如果我想使用jQuery,如何編寫不改變其他形式的代碼。 – enjoylife 2011-03-19 11:45:30

+7

@enjoylife '$('#myFormId')。attr('action','myNewActionTarget.html');' – 2013-11-05 12:14:06

19

試試這個:

var frm = document.getElementById('search-theme-form') || null; 
if(frm) { 
    frm.action = 'whatever_you_need.ext' 
} 
3

我想使用Javascript更改表單的動作,所以我可以在不同頁面的同一表單中提供不同的提交輸入。我還有使用Apache重寫將example.com/page-name更改爲example.com/index.pl?page=page-name的額外複雜性。我發現,即使預期的網址(example.com/page-name)顯示在地址欄中,也會導致更改表單的操作,導致example.com/index.pl(無頁面參數)呈現。爲了解決這個問題,我使用Javascript來插入隱藏字段來設置頁面參數。我仍然改變了表單的操作,只是這樣地址欄顯示了正確的URL。

function setAction (element, page) 
{ 
    if(checkCondition(page)) 
    { 
    /* Insert a hidden input into the form to set the page as a parameter. 
    */ 
    var input = document.createElement("input"); 
    input.setAttribute("type","hidden"); 
    input.setAttribute("name","page"); 
    input.setAttribute("value",page); 
    element.form.appendChild(input); 

    /* Change the form's action. This doesn't chage which page is displayed, 
    * it just make the URL look right. 
    */ 
    element.form.action = '/' + page; 
    element.form.submit(); 
    } 
} 

形式:

<input type="submit" onclick='setAction(this,"my-page")' value="Click Me!" /> 

這裏是我的Apache重寫規則:

,爲什麼只設置的動作並沒有
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteRule ^/(.*)$ %{DOCUMENT_ROOT}/index.pl?page=$1&%{QUERY_STRING} 

我很感興趣的任何交代工作。

1
// i assume that you want to change form action based on drop-down choice 
function change_action(form1){ 
if(form1.mydropdown_name.selectedIndex===1){ 
    form1.action = "aaaa.php"; 
}else{ 
     form1.action = "bbbb.php"; 
    } 
} 

//how to use 
<select name='mydropdown_name' id='mydropdown_id' onchange="change_action(this.form)"><option value="1">first</option><option value="2">second</option></select> 
//this way you do not have to provide js function with form name. 
相關問題