2011-03-19 27 views
23

Benim şu anki kodudur form işlemini değiştirir için JavaScript nasıl kullanılır: Bir koşul karşılandığında,şöyle

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

Şimdi formu aksiyon ve yöntemini değiştirmek için bir işlev yazmak istiyorum. Bu kodu nasıl yazarım? Bunu deneyin

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

cevap

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"; 
    } 
} 

ve formunuzu Örneğin

,

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

Sanırım belge ['search-theme-form']', 'document.search -me-formu 'aslında çalışmıyor. –

+0

Biçim adını tire olmadan tanımlamanız gerekebilir. – hop

1

jQuery kullanıyorsanız, bu kadar basit name olması gerekir bu durumda

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

Sayfadaki tüm formları değiştireceğini unutmayın. – labue

+0

jquery kullanmak istiyorsanız, diğer formları değiştirmeyen kodu nasıl yazacağım. – enjoylife

+7

@enjoylife '$ ('# myFormId'). Attr ('action', 'myNewActionTarget.html'); –

19

:

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

Javascript bir formun eylemini değiştirmek istedim, bu yüzden farklı formlara bağlantı veren aynı formda farklı gönderim girdilerine sahip olabilirdim. Ayrıca, example.com/page-name'u example.com/index.pl?page=page-name'a değiştirmek için Apache'nin yeniden yazımını kullanmanın ek bir komplikasyonu vardı. Beklenen URL (example.com/page-name) adres çubuğunda görüntülenmiş olsa bile, formun eylemini değiştirmenin example.com/index.pl (sayfa parametresi olmadan) oluşturulmasını sağladığını buldum. Bunu aşmak için, sayfa parametresini ayarlamak için gizli bir alan eklemek için Javascript kullandım. Yine de formun eylemini değiştirdim, sadece adres çubuğu doğru URL'yi görüntüledi.

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f 
RewriteRule ^/(.*)$ %{DOCUMENT_ROOT}/index.pl?page=$1&%{QUERY_STRING} 

herhangi explaination ilgi duyarım olarak sadece ayar eylem yoktu neden: Burada

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

benim Apache yeniden yazmak kurallar şunlardır: formda

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(); 
    } 
} 

iş.

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.