2016-10-12 3 views
0

У меня есть форма и множество ссылок:Javascript: Отправить форму, нажав на любой якорный тег в форме

<form action="/a"> 
<input type=text name=somedata> 
<input type=submit> 

<a href="/b">my first link</a> 
<a href="/c">link</a> 
<a href="/d">link</a> 
<a href="/e">link</a> 
</form> 

Если пользователь нажимает представить, форма должна быть представлена ​​в/а, как обычно (так без изменений).

Но когда пользователь нажимает на/b, вместо того, чтобы сломать somedata и отправить GET-запрос в/b, я хочу отправить POST-запрос в/b так, как если бы форма была <form action=/b>.

Можно ли сделать это автоматически со всеми гипертекстовыми якорями на странице, чтобы он не только работал с/b, но и/c,/d и/e?

Оба чистых Javascript и jQuery являются приемлемыми.

+0

ли вы попробовать что-нибудь? – stormec56

+0

Нет, я не знаю, как добавить onClick-событие на всех якорях с помощью Javascript – Robby75

+0

Если вы используете jQuery, вы можете использовать 'el.on (" click ",() => doFun();)' и если план старого JS будет 'el.addEventListener (« click »,() => doFun();)' –

ответ

1

Изменение action формы к href в <a> выбран и затем отправить форму

$('form a').click(function(event){ 
    event.preventDefault(); 
    $(this).closest('form').attr('action', this.href).submit(); 
}); 
+0

Я пробовал это, и он действительно отправляется на href с якоря (так что, похоже, работает файл), но все данные формы теряются , (По крайней мере, он не отображается в $ _REQUEST) – Robby75

+0

Нет причин, по которым он не должен работать ... единственное, что меняется, - это действие. Вы установили метод в форме? – charlietfl

+0

phpinfo() показал мне проблему: REQUEST_METHOD \t GET - Но я использую: '

' – Robby75

0

var form = document.querySelector("form"); 
 
var allA = document.querySelectorAll("a"); 
 

 
allA.forEach(function(el){ 
 
    
 
    el.addEventListener("click",function(e){ 
 
    form.submit(); 
 
    e.preventDefault();   
 
    }); 
 
    
 
}); 
 

 
form.addEventListener("submit",function(e){ 
 
    e.preventDefault(); 
 
    console.log("The form has been submit"); 
 
});
<form action="/a"> 
 
<input type=text name=somedata> 
 
<input type=submit> 
 

 
<a href="/b">my first link</a> 
 
<a href="/c">link</a> 
 
<a href="/d">link</a> 
 
<a href="/e">link</a> 
 
</form>

+0

Wow, это было быстро ;-), но это все равно отправит все в/a, пожалуйста, также измените действие в форме href от a, поэтому я могу принять ваш ответ – Robby75

+0

О, извините, вы имеете в виду, если нажмете на 'a', то он будет подчиняться действию'/b'? –

+0

Я помогу вам обновить код и опубликовать новый ответ, надеюсь, что это поможет вам –

0

Сначала удалить кнопку отправки.

$("#formId a").click(function(){ 
    var currentHref = $(this).attr("href"); 
    $("#formId").attr("action",currentHref); 
    $("#formId").submit(); 
}); 
1

var form = document.querySelector("form"); 
 
var allA = document.querySelectorAll("a"); 
 

 
allA.forEach(function(el){ 
 
    
 
    el.addEventListener("click",function(e){ 
 
    form.action = this.href; 
 
    console.log("Form action is been change to => " + this.href) 
 
    form.submit(); 
 
    e.preventDefault();   
 
    }); 
 
    
 
}); 
 

 
form.addEventListener("submit",function(e){ 
 
    e.preventDefault(); 
 
    console.log("The form has been submit"); 
 
});
<form action="/a"> 
 
<input type=text name=somedata> 
 
<input type=submit> 
 

 
<a href="/b">my first link</a> 
 
<a href="/c">link</a> 
 
<a href="/d">link</a> 
 
<a href="/e">link</a> 
 
</form>

Смежные вопросы