2009-08-20 30 views
7

Mam kod (patrz poniżej). Działa to doskonale w przeglądarce Firefox: zapisuje przesłane informacje po kliknięciu przycisku __JL_SAVE utrzymuje użytkownika na tej samej stronie. Ale w Internet Explorer & Opera przekierowuje tylko do strony indeksu (index.php) i nie oszczędzać przedłożone informacje. Co mogę zrobić, aby rozwiązać ten problem? Dzięki.(javascript) onClick = "form.submit(); nie działa w IE i Operze

Oto mój kod:

<form action="index.php" id="mosForm" method="post" enctype="multipart/form-data"> 

    <fieldset> 
     <legend><?=__JL_ABOUT_MYSELF?></legend> 
     <span class="a" onclick="showHideLegend('about_myself_1')"><?=__JL_EDIT_BLOCK;?></span> 
     <div id="about_myself_descr" style="display: block"><?=__JL_SELF_DESCR;?></div> 
     <div id="about_myself_1" style="display: none"><?php include "html/about_myself_fill.php"?></div> 
     <div id="about_myself_2""><?php include "html/about_myself_show.php"?></div> 
    </fieldset> 

    <fieldset> 
     <legend><?=__JL_ABOUT_MYSELF?></legend> 
     <span class="a" onclick="showHideLegend('type_1')"><?=__JL_EDIT_BLOCK;?></span> 
     <?php if ($typ_block) {?> 
      <?php /* <input type="checkbox" id="jl_type_block" name="jl_type_block" <?php if ($roon_type_block) echo 'checked ';?> /> */ ?> 
      <input type="checkbox" id="jl_type_block" name="jl_type_block" disabled <?php echo 'checked ';?> /> 
      <label for="jl_type_block"><?=__JL_ON_BLOCK?></label> 
     <?php } else { 
      echo __JL_OFF_BLOCK; 
     }?> 

     <div id="about_myself_descr" style="display: block"><?=__JL_SELF_DESCR;?></div> 

     <div id="type_1" style="display : none"> 
      <?php include "html/type.php"?> 
     </div> 
     <?php if ($typ_block) { ?> 
      <div id="type_2"> 
       <?php include "html/type_show.php"?> 
      </div> 
     <?php } ?> 
     </fieldset> 

     <fieldset> 
      <legend><?=__JL_INTEREST?></legend> 
      <span class="a" onclick="showHideLegend('interest_1')"><?=__JL_EDIT_BLOCK;?></span> 
      <?php if ($interest_block) {?> 
       <input type="checkbox" id="jl_interest_block" name="jl_interest_block" disabled <?php echo 'checked ';?> /> 
       <label for="jl_interest_block"><?=__JL_ON_BLOCK?></label> 
      <?php } else 
       echo __JL_OFF_BLOCK; 
      ?> 
      <div id="interest_descr" style="display:block"><?=__JL_INTEREST_DESCR;?></div> 
      <div id="interest_1" style="display:none"> 
       <?php include "html/interest.php"?> 
      </div> 
      <?php if ($interest_block) { ?> 
       <div id="interest_2"> 
       <?php include "html/interest_show.php"?> 
       </div> 
      <?php } ?> 
     </fieldset> 


      <input type="submit" name="save" value="__JL_SAVE" onClick="mosForm.submit();" /> 
      <input type="hidden" name="option" value="com_joomlove" /> 
      <input type="hidden" id="task" name="task" value="save_info" /> 
      </form> 

Pełne źródło dostępne h ere: http://narkoz.pastebin.com/f4f036f5

Odpowiedz

8
  1. Jeśli nie zmieniając zachowanie postaci, dlaczego wykorzystać JavaScript, aby przesłać formularz ?, jesteś już w przycisk Wyślij.

  2. Powinieneś spróbować podać nazwę postaci = "mosForm", a nie tylko id = "mosForm", aby można było znaleźć odwołanie do DOM z tej obsługi zdarzenia.

+1

uzgodnione i uzgodnione. – Funka

+1

można również odwołać się do formularza za pomocą przycisku z "this.form.submit()" ... – Funka

10

Powinieneś naprawdę wykonać dowolną logikę związaną z przesyłaniem w module obsługi zdarzeń "prześlij", a nie w "kliknięciu" jednego z elementów FORM. np .:

<form ... onsubmit="return validateForm(this);"> ... </form> 

Powinno to zapewnić, że przesyłanie oparte na klawiaturze przechodzi przez twój przewodnik; daje także możliwość zapobiegania przesyłaniu formularzy poprzez zwrócenie wartości fałszerstwa z procedury obsługi zdarzeń. Z drugiej strony każda wartość prawdy automatycznie przesyła formularz.

+1

ta metoda umożliwia również przesyłanie, gdy javascript jest wyłączony lub niedostępny. –

+0

Działa dla mnie, gdy używam 'onsubmit =" validateForm (this) "' i 'return true' w treści metody. – Simon

1

Kiedy masz:

<form method="post" action="somefile.php" name="form" id="form"> 
<button type="button" name="submit" onclick="$('#form').submit()">go</button> 
</form> 

działa w IE8, Opera, Chrome, ale nie w Firefox (14):

Firefox ma problem z: name="submit". Po zmianie atrybutu name w: name="submit_ff" (lub czymś innym), działa on również w przeglądarce Firefox.