ugrás a tartalomhoz

javascript submit function

blabla · 2012. Már. 21. (Sze), 09.29
Sziasztok

Számomra megoldhatatlan az eset, de lehet hogy ti tudtok rá megoldást. A helyzet a következô: egy kódolt php szoftverbe kell belenyúlnom. A kódolt programba természetesen nem de a templatek módosíthatóak. Itt találkoztam a következô helyzettel.

Szükségem lenne arra, hogy egy form-ot a submit elôtt leellenôrizzek. Ezt alapban a rendszer nem a beküldés elôtt, hanem utána végzi el és visszatér a hibaüzenettel ha van, tehát a form alján egy egyszerû input tag van type='submit'-tal. Mivel én a kódolt részbe nem tudok beleírni, marad az a megoldás hogy beküldés elôtt ellenôrzöm a formot, ezért az input-ot le kellene cserélnem egy javascriptes függvényre, ami ellenôriz és ha minden rendben csak akkor submitállja a formot.

Igen ám de a formon belül van egy hidden input aminek a neve submit...

És hiába csinálom meg a javascriptes függvényt, a várt 'Error: document.no1.submit is not a function' javascript hiba jön vissza. Átnevezni nem tudom a hidden inputot, mivel a kódolt részben ezt várja a program...

<html>
<script>
  function submitform()
    {
        document.no1.submit();
    }

</script>
<form name='no1' id='no1' action='no2.php' method='post'>
<input name='submit' type='hidden' value='true'>

<input type='button' value='Mehet' onclick='submitform()'>
</form>

</html>


Van esetleg erre valami megoldás, vagy nincs?
Köszönöm
 
1

Én legszívesebben

kuka · 2012. Már. 21. (Sze), 10.38
Én legszívesebben megfordítanám a felállást:
  1. <html>  
  2. <script>  
  3. function submitform()  
  4. {  
  5.   return true;  
  6. }  
  7. </script>  
  8. <form name='no1' id='no1' action='no2.php' method='post'  onsubmit='return submitform()'>  
  9. <input name='submit' type='hidden' value='true'>  
  10. <input type='submit' value='Mehet'>  
  11. </form>  
  12. </html>  
Másik lehetőség, hogy előbb megkaparintod a submit() metódust és utána csináltatod meg a sumbit inputot:
  1. <html>  
  2. <script>  
  3. function submitform()  
  4. {  
  5.   documentdocument.no1.valodisubmit = document.no1.submit;  
  6.   document.no1.hamissubmit.name = 'submit';  
  7.   document.no1.valodisubmit();  
  8. }  
  9. </script>  
  10. <form name='no1' id='no1' action='no2.php' method='post'>  
  11. <input name='hamissubmit' type='hidden' value='true'>  
  12. <input type='button' value='Mehet' onclick='submitform()'>  
  13. </form>  
  14. </html>  
(Úgy tűnik a szintaxisszínező megint beledupláz. Ha nem világos mi van ott, tekintsd meg ezt az oldalt kikapcsolt JavaScript támogatással.)
2

Köszönöm

blabla · 2012. Már. 21. (Sze), 11.27
Kösz, ki fogom próbálni
11

Az itt vázolt első

csla · 2012. Már. 27. (K), 14.58
Az itt vázolt első megoldásnak kell működni "mindenhol". Kipróbáltad?
3

esetleg probáld meg a

Karvaly84 · 2012. Már. 21. (Sze), 18.41
esetleg probáld meg a document.forms kollekción keresztül elérni a formot.
4

fireEvent

Poetro · 2012. Már. 21. (Sze), 19.20
  1. /** 
  2.  * fireEvent by Jehiah Czebotar, http://jehiah.cz/archive/firing-javascript-events-properly 
  3.  * 
  4.  * @param {Element} element 
  5.  *    DOM element. 
  6.  * @param {String} name 
  7.  *    Event name. 
  8.  * @returns {Boolean} 
  9.  *    True if the event handler returned succesfully. 
  10.  */  
  11. function fireEvent(element, name){  
  12.   var event;  
  13.   if (document.createEventObject){  
  14.     // dispatch for IE  
  15.     event = document.createEventObject();  
  16.     return element.fireEvent('on' + name, event);  
  17.   }  
  18.   else{  
  19.     // dispatch for firefox + others  
  20.     event = document.createEvent("HTMLEvents");  
  21.     event.initEvent(name, truetrue); // event type, bubbling, cancelable  
  22.     return !element.dispatchEvent(event);  
  23.   }  
  24. }  
Ezek után pedig egyszerűen: fireEvent(document.no1, 'submit');
Tudom, hogy nem a legszebb megoldás, de sajnos form esetén a DOM kicsit furán viselkedik, és a form elemei felülírják a metódusokat és tulajdonságokat.
6

A fireEvent (mármint a natív

tgr · 2012. Már. 22. (Cs), 11.45
A fireEvent (mármint a natív IE-s) nem hívja meg a default action-t.
5

HTMLFormElement.prototype.sub

tgr · 2012. Már. 22. (Cs), 11.34
  1. HTMLFormElement.prototype.submit.call(document.no1);  
Firefoxban szépen működik (debuggoláshoz szoktam használni hülyén elnevezett submit gomboknál), más böngészőben sose próbáltam, de a HTMLFormElement régi W3C szabvány, illene cross-browsernek lennie.
8

De kicsit gyanús, ha form

tgr · 2012. Már. 22. (Cs), 12.48
De kicsit gyanús, ha form validation-höz submit()-re van szükséged. Mi lesz például, ha valami hiba van a validáló kódodban? Használhatatlanná válik a form? A standard megoldás rátenni a formra egy submit eseménykezelőt, ami preventDefault-ot hív, ha nincsenek rendben az értékek.
7

function ellenoriz() { 

Hidvégi Gábor · 2012. Már. 22. (Cs), 12.15
function ellenoriz() {
  return (document.getElementById('akarmi').value.length);
}

document.getElementById('no1').onsubmit = ellenoriz;
9

Hát a firefox ok de a többi nem

blabla · 2012. Már. 26. (H), 23.14
Köszönöm a sok ötletet, alkalmaztam is csak sajnos nem elég körültekintően. Firefoxban szépen mennek a tippek, de pl. IE, Google Chrome visszavágja az egészet:(
10

Részletek?

Poetro · 2012. Már. 27. (K), 03.28
Mit jelent, hogy nem elég körültekintő? Milyen tippek mennek Firefoxban, és nem IE-ben, Chrome-ban?

Még egy próbát megér a következő:
  1. form.constructor.prototype.submit.call(form);  
12

A körültekintô

blabla · 2012. Már. 29. (Cs), 09.21
Az körültekintô arra utal, hogy azt hittem minden böngészôben ok lesz ha az egyikben megy:-)
Kipróbáltam a fireevent-es megoldást, "HTMLFormElement.prototype.submit.call(document.no1); "-t is, de egyik sem mûködik Chorme-ban és IE-ben.
13

document.getElementById('no1'

Hidvégi Gábor · 2012. Már. 29. (Cs), 11.02
document.getElementById('no1').submit(); ?
14

probléma

Poetro · 2012. Már. 29. (Cs), 11.15
A probléma pont az, hogy nem lehet hozzáférni a form submit metódusához, mert amennyiben létezik ilyen nevű eleme a formnak, akkor az felüldefiniálja. Azaz a form.submit === form.getElementsByName('submit')[0]. Ennek okán ez nem egy végrehajtható függvény.
16

Á

Hidvégi Gábor · 2012. Már. 29. (Cs), 11.34
Az baj : )
15

Nekem a következő teljesen

Poetro · 2012. Már. 29. (Cs), 11.18
Nekem a következő teljesen jól működik Chrome esetén is (IE-n jelenleg nem tudom tesztelni):
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <title>Page Title</title>  
  5. </head>  
  6. <body>  
  7. <form action="" method="get" name="no1"><input type="hidden" name="submit" value="true" /><input type="submit" name="op" /></form>  
  8. <script type="text/javascript">  
  9. (function (document) {  
  10.   var form = document.forms['no1'];  
  11.   setTimeout(function () {  
  12.     form.constructor.prototype.submit.call(form);  
  13.   }, 2000);  
  14. }(document));  
  15. </script>  
  16. </body>  
  17. </html>  
17

IE

Hidvégi Gábor · 2012. Már. 29. (Cs), 12.02
Elvileg IE8-tól van csak konstruktora a form objektumnak. Nálam a következő megy IE7 alatt is:

<html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<form action="" method="get" name="no1" id="no1">
  <input type="hidden" name="submit" value="true" />
  <input id="hehe" type="submit" name="op" />
</form>
<script type="text/javascript">
function ellenoriz() {
  alert('submit');
}
document.getElementById('no1').onsubmit = ellenoriz;
setTimeout(function () {
  document.getElementById('hehe').click();
}, 4000);
</script>
</body>
</html>


Az <input type="submit">-nak adtam egy id-t a könnyebbség kedvéért, dom műveletekkel meg lehet keresni.
18

A

tgr · 2012. Már. 30. (P), 12.02
A HTMLFormElement.prototype.submit.call is működik Chrome alatt.