2017-01-06 1 views
1

Ich arbeite an einem Web-Projekt, und ich schrieb einige JS-Funktionen, aber nachdem ich meine vorträgt durch Tasten geändert, die meine Funktion verwendet, um zu bestätigen, wenn Sie Daten löschen wollen oder nicht, ist nicht mehr funktionieren.Hat submit() Funktion hat Vorrang auf onSubmit?

Ich wollte Fragen an - Titel -

Falls Sie den Code hier zu sehen ist (nur html/js) =

<style> 
    .tableau_objectif { 
    width: 80%; 
    border-collapse: collapse; 
    } 

th { 
    background: #386795; 
    color: white; 
    font-weight: bold; 
    text-align:center !important; 
} 
.tableau_objectif th { 
    padding: 6px; 
    border: 1px solid #ccc; 
    text-align: left; 


    word-wrap: break-word; 
} 

td{ 
    padding: 6px; 
    border: 1px solid #ccc; 
    text-align: left; 


    word-wrap: break-word; 
} 
</style> 

<div class="col-md-12" style="text-align:center"> 
<form method="post" action="<?= site_url('admin/Gestion_abonnes/search'); ?>"></br> 
    Nom : <input type='text' name="recherche_nom" /></br> 
    Prénom : <input type='text' name="recherche_prenom" style="margin-top:10px;"/></br> 
    Email : <input type='text' name="recherche_mail" style="margin-top:10px;"/></br> 
    Option SMS : <input type="checkbox" name="recherche_sms" style="margin-top:10px;"/></br> 
    Rechercher : <input type="submit" style="margin-top:10px;" class="tn btn-primary"> 
</form> 
</div> 

<table class="tableau-objectif col-md-12" style="margin-top:30px;margin-bottom: 30px;"> 
    <tr> 
     <th>Customer Id</th> 
     <th>Nom</th> 
     <th>Prénom</th> 
     <th>Email</th> 
     <th>Prochain renouvellement</th> 
     <th>SMS</th> 
     <th>Annuler le renouvellement</th> 
     <th>Annuler l'option SMS</th> 

    </tr> 

<?php 
    $cpt=0; 
    foreach($test as $row){ 



     $sms_test = $row->autoRenew; 
      ?> 
       <form method="post" action="<?= site_url('admin/Gestion_abonnes/change_renew'); ?>" onsubmit="return confirmation()" id="f_<?php echo $cpt; ?>" > 
        <tr> 
         <td><?php echo $row->customerId; ?><input type="hidden" name="id" value="<?php echo $row->customerId; ?>"/></td> 
         <td><?php echo $row->customer_lastname; ?><input type="hidden" name="nom" value="<?php echo $row->customer_lastname; ?>"/></td> 
         <td><?php echo $row->customer_firstname; ?><input type="hidden" name="prenom" value="<?php echo $row->customer_firstname; ?>"/></td> 
         <td><?php echo $row->customer_email; ?></td> 
         <td><?php echo $row->fin; ?><input type="hidden" name="fin" value="<?php echo $row->fin;?>" /></td> 

         <td><?php if(isset($row->customerAbo) && $sms_test == 1){ ?> 
          <span style="color:green">Oui</span> 
          <input type="hidden" name="idsms" value="<?php echo $row->customerAbo; ?>" /> 
          <input type="hidden" name="datesms" value="<?php echo $row->fin_sms; ?>" /> 
         <?php } 
         else{ ?> 
          <span style="color:red">Non</span> 
         <?php }?></td> 

         <td><input type="button" value="Désactiver le renouvellement automatique" id="renb_<?php echo $cpt; ?>" onClick="myClick(this)"/></td> 

         <?php if(!empty($sms_test)){ ?> 
         <td><input type="button" value="Désactiver l'option SMS" id="smsb_<?php echo $cpt; ?>" onclick="myClick(this)"/></td> 
         <?php } 
         else{ ?> 
         <td></td> 
         <?php } ?> 
        </tr> 
       </form> 

     <?php 

     $cpt++; 
    } 
?> 

Und JS

<script> 

    var urltest = <?= json_encode(site_url('admin/Gestion_abonnes')); ?>; 


      function confirmation(){ 

       var action = this.getAttribute('action'); 

       alert(action); 

       return false; 

       if(action === urltest+'/change_renew'){ 
        return confirm("Voulez-vous vraiment désactiver le renouvellement automatique ?\n"+action); 
       } 

       else{ 
        return confirm("Voulez-vous vraiment désactiver l'option SMS ?\n"+action); 
       } 


      } 

      function myClick(button){ 

       var e = button; 
       var id = e.getAttribute('id'); 

       var part = id.split('_'); 


       if(part[0] === "smsb"){ 
        document.getElementById('f_'+part[1]).action = urltest+'/change_sms'; 
       } 

       else{ 
        document.getElementById('f_'+part[1]).action = urltest+'/change_renew'; 
       } 


       confirmation(); 
       document.getElementById('f_'+part[1]).submit(); 

       console.log(document.getElementById('f_'+part[1]).getAttribute('action')); 
      } 




    </script> 

Huh das Hauptproblem ist, ich soll ein Popup haben, vor der Unterbreitung, aber es gibt keinen Popup-cer tainly wegen submit() Priorität (ich könnte falsch seinc).

Antwort

1

Vom HTML spec for the form submission algorithm, Schritt 5 sagt:

Wenn die eingereichten von submit() Methode nicht gesetzt ist, dann ein einfaches Ereignis ausgelöst, die Blasen und ist kündbaren genannt einreichen, in Form.

während die Spezifikation für form.submit() sagt:

Die einreichen() -Methode, wenn sie aufgerufen wird, muss das Formularelement aus das Formularelement selbst mit dem von einreichen eingereicht submit() Methode Flag einstellen.

Also, wenn Sie form.submit() nennen, bewusst der Browser das Ereignis einreichen Brennen auslässt, die die onSubmit Handler behandelt, so dass Ihr Bestätigungscode wird nicht aufgerufen.

+0

huh ok, eine Möglichkeit, dass (Aufruf Bestätigung() auf mylick() für exemple) zu vermeiden? –

+0

Ja natürlich. Rufen Sie währenddessen "confirmation()" auf, bevor Sie submit aufrufen. Sie müssen nur "this" richtig einstellen. Versuchen Sie 'confirmation.call (document.getElementById ('f _' + Teil [1]))' – Alohci

+0

.. und Code hinzufügen, um nicht einreichen() aufrufen, wenn confirmation.call() gibt false. – Alohci

Verwandte Themen