Как использовать 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?
Ответы
Ответ 1
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">
Ответ 2
Попробуйте следующее:
var frm = document.getElementById('search-theme-form') || null;
if(frm) {
frm.action = 'whatever_you_need.ext'
}
Ответ 3
Я хотел использовать Javascript для изменения действия формы, поэтому у меня могут быть разные входы ввода в одной и той же форме, связанные с разными страницами. У меня также было дополнительное усложнение использования Apache rewrite для изменения example.com/page-name
на example.com/index.pl?page=page-name
. Я обнаружил, что изменение действия формы вызвало example.com/index.pl
(без параметра страницы), даже если ожидаемый URL (example.com/page-name
) был отображен в адресной строке. Чтобы обойти это, я использовал 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 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}
Мне было бы интересно узнать, почему просто настройка действия не сработала.
Ответ 4
Если вы используете jQuery, это так просто:
$('form').attr('action', 'myNewActionTarget.html');
Ответ 5
// 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.