2016-08-11 7 views
0

Ich habe dynamisch mehrere Auswahlliste erstellt. Nach dem Klick auf den Kanalnamen sollte der Typ angezeigt werden. Das Problem ist, wenn man auf die select-Liste klickt, wird die Java Script-Funktion wiederholt aufgerufen, wodurch ajax mehrmals geladen wird.
HTML-Code:Dynamisch erstellte Auswahlliste macht vielfache Aufrufe von JavaScript-Funktion

<td> 
           <SELECT name="channel_name[]" onclick ="get_type(this)"; required class='channelname'> 
             <option value="">Select...</option> 
             <?php foreach($channel_list as $row) { 
               $channelid = $row['channelid']; 
               $channelname = $row['channelname']; 

               if($U_channelid==$channelid) 
               { 
                 $s = "selected = selected"; 
               } 
               else 
               { 
                 $s = ""; 
               } 
               echo "<option value='$channelid' $s>".$channelname."</option>"; 
             ?> 
<!--         <OPTION value='<?php echo $channelid ?>' $s ><?php echo $channelname?></OPTION> --> 

           <?php } ?> 
           </SELECT> 
         </td> 

Javascipt Code:

function get_type() 
{ 
     $(".channelname").live("change", function() { 

       var channel_id = $(this).find("option:selected").attr("value"); 
       var _this = $(this); //Save current object 
       alert(channel_id); 
       $.ajax({ 
         type: "POST", 
         url: '<?php echo base_url(); ?>index.php/partner/get_channel_type', 
         data: 'channelid='+channel_id, 
         async: false 
         }).done(function(data1) { 

         if(data1){ 
           _this.closest("tr").find('input[name="type[]"]').val(data1); 

         }else{ 
           alert("Channel type is not defined"); 
           _this.closest("tr").find('input[name="type[]"]').val(""); 

         } 


       }); 
    }); 
} 

Antwort

0

entfernen Onclick = "get_type (this)" von select-Tag // weil Sie bereits $ mit ("channel.") .live ("change", function() {in Javascript

setzen Sie diese

<SELECT name="channel_name[]" required class='channelname'> 

und Javascript

$(".channelname").change(function() { 

       var channel_id = $('.channelname').find("option:selected").attr("value"); 
       alert(channel_id); 
       $.ajax({ 
         type: "POST", 
         url: '<?php echo base_url(); ?>index.php/partner/get_channel_type', 
         data: 'channelid='+channel_id, 
         async: false 
         }).done(function(data1) { 

         if(data1){ 
           _this.closest("tr").find('input[name="type[]"]').val(data1); 

         }else{ 
           alert("Channel type is not defined"); 
           _this.closest("tr").find('input[name="type[]"]').val(""); 

         } 


       }); 
    }); 
+0

Dank. Ich hielt get_type (this) im Select-Code und $ (". Channelname"). Change (function() {in javascritpt-Funktion. Es funktioniert jetzt – Arti

+0

Ajax-Verarbeitung dauert 10 Sekunden, um die Daten zu laden. Können wir es minimieren ?? – Arti

Verwandte Themen