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:

<html>
<script>
function submitform()
{
  return true;
}
</script>
<form name='no1' id='no1' action='no2.php' method='post'  onsubmit='return submitform()'>
<input name='submit' type='hidden' value='true'>
<input type='submit' value='Mehet'>
</form>
</html>
Másik lehetőség, hogy előbb megkaparintod a submit() metódust és utána csináltatod meg a sumbit inputot:

<html>
<script>
function submitform()
{
  document.no1.valodisubmit = document.no1.submit;
  document.no1.hamissubmit.name = 'submit';
  document.no1.valodisubmit();
}
</script>
<form name='no1' id='no1' action='no2.php' method='post'>
<input name='hamissubmit' type='hidden' value='true'>
<input type='button' value='Mehet' onclick='submitform()'>
</form>
</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

/**
 * fireEvent by Jehiah Czebotar, http://jehiah.cz/archive/firing-javascript-events-properly
 *
 * @param {Element} element
 *    DOM element.
 * @param {String} name
 *    Event name.
 * @returns {Boolean}
 *    True if the event handler returned succesfully.
 */
function fireEvent(element, name){
  var event;
  if (document.createEventObject){
    // dispatch for IE
    event = document.createEventObject();
    return element.fireEvent('on' + name, event);
  }
  else{
    // dispatch for firefox + others
    event = document.createEvent("HTMLEvents");
    event.initEvent(name, true, true); // event type, bubbling, cancelable
    return !element.dispatchEvent(event);
  }
}
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
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ő:
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):

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<form action="" method="get" name="no1"><input type="hidden" name="submit" value="true" /><input type="submit" name="op" /></form>
<script type="text/javascript">
(function (document) {
  var form = document.forms['no1'];
  setTimeout(function () {
    form.constructor.prototype.submit.call(form);
  }, 2000);
}(document));
</script>
</body>
</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.