Форма с настройка на action

dakata__92

Super Moderator
Идеята ми е може ли в дадена форма да има да кажем 10 бутона които при натискане да допълват actiona :
HTML:
<form action="http://example.com/ + ID" method="POST" target="_blank">
<input type="submit" name="vote-for-me" class="vote-input" id='dakata__92' value="dakata__92">
<input type="submit" name="vote-for-me" class="vote-input" id='ivan' value="ivan">
<input type="submit" name="vote-for-me" class="vote-input" id='milen' value="milen">
</form>
Има ли начин при който когато натисна бутона dakata__92 да се зареди action="http://example.com/dakata__92" ?
Примерно съгласен съм и на друг начин който май ще е по-удачен , но ще ми е нужен код който при натискане и изпълняване на формата да може да следи бутоните . Ако може да обедините този код с формите под него ще съм Ви много много благодарен :
[js]
<script>var count = 3;

var a = 0;
var b = 0;
var c = 0;
var t = 0;
var name;

function vote(name) {

if (document.send.elements["name"].value == "") alert('Първо попълни името си в !');
else {
if (document.send.elements["skype"].value == "") alert('Първо попълни скайп името си!');
else {
if (a == 0) {
check();
timer();
} else {
if (b < 20) {
c++;
}
b = 0;
};
a++;
document.getElementById(name).innerHTML = "";
window.open("http://example.com/"+name,'vote','width=880,height=600');
if (a == count) {
ready();
}
}
}
}

function check() {
b++;
setTimeout("check()", 10);
}

function timer() {
t++;
setTimeout("timer()", 1000);
}

function ready() {

document.send.elements["time"].value = t;
document.send.elements["missed"].value = c;
document.getElementById("button").innerHTML = "<input type='submit' name='submit' />";
document.send.elements['submit'].click();


}
</script>
[/js]

HTML:
<form action="http://example.com/dakata__92" method="POST" target="_blank">
<input type="submit" name="vote-for-me" class="vote-input" value="dakata__92">
</form>
<form action="http://example.com/ivan" method="POST" target="_blank">
<input type="submit" name="vote-for-me" class="vote-input" value="ivan">
</form>
<form action="http://example.com/milen" method="POST" target="_blank">
<input type="submit" name="vote-for-me" class="vote-input" value="milen">
</form>

Ето и формата на която се получават доказателсвата , а горните форми са заявките играят ролята на бутони :
HTML:
<form  name="send" method="post" action="mail.php" accept-charset="UTF-8" > 
<input type="text" name="name">
<input type="text" name="skype">
<input type="hidden" name="time"> 
<input type="hidden" name="missed"> 
<span style="visibility:hidden;" id="button"></span> 
</form>
 
В случай, че не ползваш jQuery, малко ще промениме кода:

1. Submit бутоните стават обикновенни бутони.
2. Формуляра трябва да има id стойност.
3. Отново за по-лесно, добавяме един скрит елемент, който да съдържа action на формуляра без допълненията за потребителското име. След всяко натискане на бутона реално променяш стойността на action и ако не му знаеш оргиналната стойност, трябва да използваш regexp и replace за да махнеш предишното потребителско име и да добавиш новото. Аз го правя по по-мързеливия начин:
4. След като сменя action, събмитвам формуляра и с това имитирам действието на твоите събмит бутони.
5. Към всеки бутон, добавяме onlick атрибут с нашата функция. След като един и същи код се повтаря многократно, най-добре е да се изведе като функция и само да се извиква, когато е нужно. Така ако се налага да правиш промени, ще бъде само на едно място. Като параметър на функцията подаваме стойността на бутона. Ако искаш да предаваш id на бутона, вместо this.value, използваш this.id

HTML:
<script type="text/javascript">
function updateAction(user){
	document.getElementById('mf').action = document.getElementById('base_url').value + user;
	document.getElementById('mf').submit();
}
</script>


<form action="http://example.com/" method="POST" target="_blank" id="mf">
<input type="hidden" name="base_url" id="base_url" value="http://example.org/" />
<input type="button" name="vote-for-me" class="vote-input" id='dakata__92' value="dakata__92" onclick="updateAction(this.value);">
<input type="button" name="vote-for-me" class="vote-input" id='ivan' value="ivan" onclick="updateAction(this.value);">
<input type="button" name="vote-for-me" class="vote-input" id='milen' value="milen" onclick="updateAction(this.value);">
</form>
 
Приятел ти ми реши с това малко кодче цяла страница мъки :) Набързо го преработих мъничко понеже заявката задължително трябва да е type="submit" , а не type="button" . Пренасочих го към ифрейм , но понеже мразя ифреймовете ми се искаше да е в window.open прозорец . Вместо direct да е target - а на формата в ифрейм , да се пренасочи в прозорец и ифрейма да изчезне . Така предполагам , че когато се подаде различен action="нещо" от различните бутони , ще се зареждат в 1 прозорец както се получава в ифрейма , а не примерно с target="_blank" да ми излиза при всеки бутон нов прозорец .

HTML:
<script type="text/javascript">
function updateAction(user){        
document.getElementById('mf').action = document.getElementById('base_url').value + user;        
window.open('width=880,height=600');
}
</script>
<form action="http://example.com/" method="POST" target="direct" id="mf">
<input type="hidden" name="base_url" id="base_url" value="http://example.com/" />
<input type="submit" name="vote-for-me" class="vote-input" id='dakata__92' value="dakata__92" onclick="updateAction(this.value);">
<input type="submit" name="vote-for-me" class="vote-input" id='4444' value="4444" onclick="updateAction(this.value);">
<input type="submit" name="vote-for-me" class="vote-input" id='cool' value="cool" onclick="updateAction(this.value);">
</form>
<center><iframe name="direct" style="background-color: #FFFFFF"  scrolling="yes" width="1000px" height="950px"></iframe></center>
 
Така предполагам , че когато се подаде различен action="нещо" от различните бутони , ще се зареждат в 1 прозорец както се получава в ифрейма , а не примерно с target="_blank" да ми излиза при всеки бутон нов прозорец .

За още по-сигурно, в window.open може да зададеш стойност и на втория параметър - това е името на прозореца, така като се изпълнява window.open, javascript винаги ще търси отворен прозорец с това име, чак ако няма (в първия момент, или пък ако вече е бил затворен) тогава ще отвори нов.

[js]window.open('width=880,height=600', 'rating_window');[/js]
 
Подадох на скрипта константа var count = 3 ; която ми играе ролята на броя на бутоните и var a = 0; с която желая да броя колко бутона са натиснати и при достигане на константата да активирам функция ready() . В ready() съм въвел още една проверка която май е ненужна , но все пак , А е по - голямо от константата минус 1 (a > count - 1) , което според мен значи че 0 е по - голяма от 3 - 1 демек отрицателно число нооо тази проверка да я оставим настрана . Искам при натискане на бутон от форвата той да изчезне след което a++; да го засече и когато a == count да активира функция ready() в която може да се премахне втората ми нелепа проверка . Не съм много на ти с програмирането , но поне проследявам нещата :)
Код:
<script type="text/javascript">
var count = 3;
var a = 0;
function updateAction(user){  
a++;      
document.getElementById('mf').action = document.getElementById('base_url').value + user;
window.open('rating_window','width=880,height=600'); 
if (a == count) {
ready();
}       
}

function ready() {
	if (a > count - 1) {
		document.getElementById('ready').innerHTML = "<b><font size=+2>Натистахте всички бутони!</b></size>";

	} else {
		document.getElementById('ready').innerHTML ="<b><font size=+2>Не сте натистали всички бутони!</b></size>";
	};
	
}
</script>
<form action="http://example.com/" method="POST" target="rating_window" id="mf">
<input type="hidden" name="base_url" id="base_url" value="http://example.com/" />
<input type="submit" name="vote-for-me" class="vote-input" id='dakata__92' value="dakata__92" onclick="updateAction(this.value);">
<input type="submit" name="vote-for-me" class="vote-input" id='4444' value="4444" onclick="updateAction(this.value);">
<input type="submit" name="vote-for-me" class="vote-input" id='cool' value="cool" onclick="updateAction(this.value);">
</form>
 
Обаче излезе и проблем с пренасочването пренасочва ме но с Мозила когато кликна върху някой бутон изкарва страницата но старата на която е кода я пренасочва към rating_window страница - вероятно е заради target="rating_window" във формата . На Explorer страницата стои без да се пренасочва но при мозилата се пренасочва :(
 
За да имаш достъп до бутона, а не само до неговата стойност:

1. При натискане на бутона, вече ще предаваме не неговата стойност, а обекта, който представлява този бутон в DOM дървото:
HTML:
<input type="submit" name="vote-for-me" class="vote-input" id='4444' value="4444" onclick="updateAction(this);">

2. Променяме и двете функции, като им подаваме този обект на бутона.

3. Не ми е много ясно за window.open, но си изпуснал първия параметър - кой адрес да се зареди в този прозорец, оставих го празно.


HTML:
<script type="text/javascript"> 
var count = 3;
var a = 0;

function updateAction(user){ 
    a++;     
    document.getElementById('mf').action = document.getElementById('base_url').value + user.value;
    window.open('', 'rating_window', 'width=880,height=600');

    if (a == count) {
        ready(user);
    }else{
	alert(a+ ' != '+count);
    }
}

function ready(user_button) {

   user_button.style.display = 'none';

   if (a > count - 1) {
      document.getElementById('ready').innerHTML = "<b><font size=+2>Натистахте всички бутони!</b></size>";

   } else {
      document.getElementById('ready').innerHTML ="<b><font size=+2>Не сте натистали всички бутони!</b></size>";
   };
   
}

</script>

<form action="http://example.com/" method="POST" target="rating_window" id="mf">
<input type="hidden" name="base_url" id="base_url" value="http://example.com/" />
<input type="submit" name="vote-for-me" class="vote-input" id='dakata__92' value="dakata__92" onclick="updateAction(this);">
<input type="submit" name="vote-for-me" class="vote-input" id='4444' value="4444" onclick="updateAction(this);">
<input type="submit" name="vote-for-me" class="vote-input" id='cool' value="cool" onclick="updateAction(this);">
</form>
 
Поставил съм само таргета на формата без да и подам и връзка ... В момента незнам защо , но винаги при кликане на бутоните само последния ми изчезва , а идеята ми е който и бутон да натисна да изчезне и като натисна всички да изчезнат и да зареди от функция ready (user_button) Натиснахте всички бутони .
Код:
<script type="text/javascript"> 
var count = 3;
var a = 0;
function updateAction(user){     
a++;         
document.getElementById('mf').action = document.getElementById('base_url').value + user.value;    
window.open('http://http://example.com/', 'rating_window', 'width=880,height=600');    
if (a == count) {        
ready(user_button);    
}
}
function ready(user_button) {   
user_button.style.display = 'none';   
if (a > count - 1) {      
document.getElementById('ready').innerHTML = "<b><font size=+2>Натистахте всички бутони!</b></size>";   
} else {      
document.getElementById('ready').innerHTML ="<b><font size=+2>Не сте натистали всички бутони!</b></size>";   
};   
}
</script>
<form action="http://example.com/" method="POST" target="rating_window" id="mf">
<input type="hidden" name="base_url" id="base_url" value="http://http://example.com/" />
<input type="submit" name="vote-for-me" class="vote-input" id='dakata__92' value="dakata__92" onclick="updateAction(this);">
<input type="submit" name="vote-for-me" class="vote-input" id='4444' value="4444" onclick="updateAction(this);">
<input type="submit" name="vote-for-me" class="vote-input" id='cool' value="cool" onclick="updateAction(this);">
</form>
 
Пропуснал съм нещо - след като скриеш бутона, трябва да нулираш А, обаче след проверката за съобщението:

[js]
if (a > count - 1) {
a = 0;
document.getElementById('ready').innerHTML = "<b><font size=+2>Натистахте всички бутони!</b></size>";
} else {
document.getElementById('ready').innerHTML ="<b><font size=+2>Не сте натистали всички бутони!</b></size>";
};
[/js]
 
Незнайно защо съм поставил в ready () document.getElementById('ready').innerHTML = "<b><font size=+2>Натистахте всички бутони!</b></size>"; Което означава , че трабва да имам един бутон който при клик да проверява a > count - 1 , ноо това не го искам по - добре само да ми извежда текста :D
 
Всъщност А не трябва да се нулира, ами за всеки бутон по отделно май трябва да се брои по колко пъти е натиснат? Аз не знаех какво е това "ready" и си направих един див под формата където да изкарва съобщението.

HTML:
<script type="text/javascript"> 
var count = 3;
var a = 0;
var buttons = Array;

function updateAction(user){ 
    if(buttons[user.id] == undefined){
	buttons[user.id] = 0;
    }

    buttons[user.id]++;     
    document.getElementById('mf').action = document.getElementById('base_url').value + user.value;
    window.open(document.getElementById('mf').action, 'rating_window', 'width=880,height=600');

    if (buttons[user.id] == count) {
        ready(user);
    }
}

function ready(user_button) {

   user_button.style.display = 'none';

   if (buttons[user_button.id] > count - 1) {
      document.getElementById('ready').innerHTML = "<b><font size=+2>Натистахте всички бутони!</b></size>";
   } else {
      document.getElementById('ready').innerHTML ="<b><font size=+2>Не сте натистали всички бутони!</b></size>";
   };
   
}

</script>

<form action="http://example.com/" method="POST" target="rating_window" id="mf">
<input type="hidden" name="base_url" id="base_url" value="http://example.com/" />
<input type="submit" name="vote-for-me" class="vote-input" id='dakata__92' value="dakata__92" onclick="updateAction(this);">
<input type="submit" name="vote-for-me" class="vote-input" id='4444' value="4444" onclick="updateAction(this);">
<input type="submit" name="vote-for-me" class="vote-input" id='cool' value="cool" onclick="updateAction(this);">
</form> 

<div id="ready"></div>
 
Ето така в е ready() функцията с бутон Ready който проверява дали са натиснати всички бутони и вади надписа . Този бутон знам , че не е за там ноо като смепочнали с този код да довършим нещата . Когато натисна всичките 3 бутона и след това Ready ми изписва , че съм натиснал всичките бутони но желанието ми е като натисна dakata__92 да изчезне и да дойде следващия 4444 . Чудя се ако се постави id в таблица дали няма да стане .
HTML:
<script type="text/javascript"> 
var count = 3;
var a = 0;
function updateAction(user){     
a++;         
document.getElementById('mf').action = document.getElementById('base_url').value + user.value;    
window.open(document.getElementById('mf').action, 'rating_window', 'width=880,height=600');    
if (a == count) {        
ready();    
}
}
function ready() {   
   
if (a > count - 1) { 
document.getElementById('ready').innerHTML = "<b><font size=+2>Натистахте всички бутони!</b></size>";   
} else {      
document.getElementById('ready').innerHTML ="<b><font size=+2>Не сте натистали всички бутони!</b></size>";   
};   
}
</script>
<form action="http://example.com/" method="POST" target="rating_window" id="mf">
<input type="hidden" name="base_url" id="base_url" value="http://example.com/" />
<input type='submit' name='vote-for-me' class='vote-input' id='dakata__92' value='dakata__92' onclick="updateAction(this);">
<input type='submit' name='vote-for-me' class='vote-input' id='4444' value='4444' onclick="updateAction(this);">
<input type='submit' name='vote-for-me' class='vote-input' id='cool' value='cool' onclick="updateAction(this);">
</form>
<div id="ready" align="left">
<button  OnClick="ready()">Ready</button>
</div>
Не се получи . Това е само часта която промених :
HTML:
<table>
<td id='dakata__92'><input type='submit' name='vote-for-me' class='vote-input' value='dakata__92' onclick="updateAction(this);"></td>
<td id='4444'><input type='submit' name='vote-for-me' class='vote-input'  value='4444' onclick="updateAction(this);"></td>
<td id='cool'><input type='submit' name='vote-for-me' class='vote-input' value='cool' onclick="updateAction(this);"></td>
</table></form>
 
В такъв случай, трябва да махаш бутона още при натискането, без значение от броенето. С таблицата няма как да стане, защото при натискането ти предаваш обекта на бутона, пък id-то е отишло като атрибут на td.

Код:
<script type="text/javascript"> 
var count = 3;
var a = 0;

function updateAction(user){ 

   a++;

   user.style.display = 'none';

    document.getElementById('mf').action = document.getElementById('base_url').value + user.value;
    window.open(document.getElementById('mf').action, 'rating_window', 'width=880,height=600');

    if (a == count) {
        ready();
    }
}

function ready() {

   if (a > count - 1) {
      document.getElementById('ready').innerHTML = "<b><font size=+2>Натистахте всички бутони!</b></size>";
   } else {
      document.getElementById('ready').innerHTML ="<b><font size=+2>Не сте натистали всички бутони!</b></size>";
   };
   
}

</script>

<form action="http://example.com/" method="POST" target="rating_window" id="mf">
<input type="hidden" name="base_url" id="base_url" value="http://example.com/" />
<input type="submit" name="vote-for-me" class="vote-input" id='dakata__92' value="dakata__92" onclick="updateAction(this);">
<input type="submit" name="vote-for-me" class="vote-input" id='4444' value="4444" onclick="updateAction(this);">
<input type="submit" name="vote-for-me" class="vote-input" id='cool' value="cool" onclick="updateAction(this);">
</form> 

<div id="ready"></div>
 
Добавих един var user; и този код user.style.display = 'none'; и се получи . Както знаещ още няма да бързам с + чето от мен но ти е сигорно :)
 

Back
Горе