2014-09-30 4 views
0

Существует div элемента:JQuery код не работает после сброса содержимого Див дважды

... 
<div id="liste_secteurs"></div> 
... 
<script type="text/javascript"> 
$(document).ready(function() { 
    rechercheSecteursEtProduits(0); // setting the div's content 
    $('#btnSupprimer').click(function() { // btnSupprimer = button generated from an ajax called inside previous function "rechercheSecteursEtProduits" 
     if ($(':checkbox[id^="prod_"]:checked').length > 0) { 
      var msg = "Do you want to remove these records ?"; 
      if (confirm(msg)) { 
       $(':checkbox[id^="prod_"]:checked').each(function(){ 
        var type = "",id=""; 
        if($(this).val() == "") { // delete secteur 
         type = "secteur"; 
         var tabIdx = $(this).attr("id").substr(5); 
         id = $("#secteur_"+tabIdx).val(); 
        } else {     // delete produit 
         type = "produit"; 
         id = $(this).val(); 
        } 
        $.ajax({ 
         data: "type="+type+"&id="+id, 
         type: "POST", 
         url: "<?php echo HTTP_AJAX ?>service/SupprimerSecteursProduitsUserAjax.php", // deleting database row 
         async: false 
        }); 
       }); 
       rechercheSecteursEtProduits(0); // this causes the bug : the "delete" button does not work anymore after this code is called ! 
      } 
     } 
    }); 
}); 

function rechercheSecteursEtProduits(pn){ 

    var user = "<?php echo $_SESSION[CODE_USER]; ?>"; 
    var html = $.ajax({ 
     data: "id_user="+user, 
     type: "POST", 
     url: "<?php echo HTTP_AJAX ?>service/ListerProduitsUserParSecteursAjax.php?pn=" + pn, 
     async: false 
    }).responseText; 

    $('#liste_secteurs').html(html); // this is the div element 

} 

</script> 

Код ListerProduitsUserParSecteursAjax.php:

<?php 
... // getting database data 
?> 
<p>Total : <?php echo $nr; ?></p> 
<div><a href="service.php?action=ServiceAjouterSecteurProduit"><img src="<?php echo HTTP_ICON.'plus.png'; ?>" /></a></div> 
<?php echo $paginationDisplay; ?> 
<table id="table" class="data display " > 
    <thead style="background-color:#CCC"> 
    <tr> 
     <th><?php echo _getText("service.produit.form.secteur_activite");?></th> 
     <th><?php echo _getText("service.produit.form.titre");?></th> 
     <th></th> 
     <th><?php if($data["secteur"]["cnt"] > 0){ ?><input type="checkbox" id="check_all"><?php }?></th> 
    </tr> 
    </thead> 
    <tbody style="background-color:#FFF"> 
    <?php 

    if($data["secteur"]["cnt"] > 0){ 
     for($i=0;$i<$data["secteur"]["cnt"];$i++){?> 
    <tr class="odd gradeX"> 
     <td><?php echo $data["secteur"][$i]["secta_lib_fr"] ?></td> 
     <td><?php echo $data["secteur"][$i]["produit_lib"] ?></td> 
     <td align="center" style="vertical-align:middle"><a href="service.php?action=ServiceModifierSecteurProduit&s=<?php echo $data['secteur'][$i]['id_user_secteur']; ?>&p=<?php echo $data['secteur'][$i]['id_user_produit']; ?>"><img src="<?php echo HTTP_ICON.'edit.png'; ?>" alt="<?php echo _getText('main.btn.modifier'); ?>" style="height:10px;width:10px;" /></a></td> 
     <td align="center" style="vertical-align:middle"><input type="checkbox" id="prod_<?php echo $i; ?>" value="<?php echo $data['secteur'][$i]['id_user_produit']; ?>"><input type="hidden" id="secteur_<?php echo $i; ?>" value="<?php echo $data['secteur'][$i]['id_user_secteur']; ?>"></td> 
    </tr> 
    <?php } ?> 
    <?php 
    } 
    else{ 
    ?> 
    <tr class="odd gradeX"> 
     <td colspan="4" align="center"><b><?php echo _getText('main.liste.no_data'); ?></b></td> 
    </tr> 
    <?php }?> 
    </tbody> 
</table> 
<?php if($data["secteur"]["cnt"] > 0){ ?> 
<div align="right"><input name="btnSupprimer" id="btnSupprimer" type="button" value="<?php echo _getText("main.btn.delete"); ?>" class="btn btn-blue"/></div> 
<?php } ?> 
<?php echo $paginationDisplay; ?> 

При загрузке страницы в первое время, то кнопка удаления работает нормально: выбранные строки удаляются, и список снова появляется в соответствии с новыми данными базы данных. Но позже, когда я хочу удалить другие строки, предупреждение не отображается, когда я проверяю некоторые флажки и нажимаю кнопку «Удалить»!

Так что же не так в моем подходе?

ответ

0

Как от ответа пещерного я сделал некоторые обновления:

function rechercheSecteursEtProduits(pn) { 

    var user = "<?php echo $_SESSION[CODE_USER]; ?>"; 
    var html = $.ajax({ 
     data: "id_usermer="+user, 
     type: "POST", 
     url: "<?php echo HTTP_AJAX ?>service/ListerProduitsUserParSecteursAjax.php?pn=" + pn, 
     async: false 
    }).responseText; 

    $('#liste_secteurs').html(html); 
    $('#btnSupprimer').on('click',function(){ 
     if ($(':checkbox[id^="prod_"]:checked').length > 0) { 
      if (confirm("Do you want to remove these records ?")) { 
       $(':checkbox[id^="prod_"]:checked').each(function(){ 
        var type = "",id=""; 
        if($(this).val() == "") { // delete secteur 
         type = "secteur"; 
         var tabIdx = $(this).attr("id").substr(5); 
         id = $("#secteur_"+tabIdx).val(); 
        } else {     // delete produit 
         type = "produit"; 
         id = $(this).val(); 
        } 
        $.ajax({ 
         data: "type="+type+"&id="+id, 
         type: "POST", 
         url: "<?php echo HTTP_AJAX ?>service/SupprimerSecteursProduitsUserAjax.php", // deleting database row 
         async: false 
        }); 
       }); 
       rechercheSecteursEtProduits(0); 
      } 
     } 
    }); 

} 

И это работает!

0

Попробуйте использовать на вместо мыши, как показано ниже

$('#btnSupprimer').on("click","#liste_secteurs",function() { // btnSupprimer = button generated from an ajax called inside previous function "rechercheSecteursEtProduits" 
     if ($(':checkbox[id^="prod_"]:checked').length > 0) { 
      var msg = "Do you want to remove these records ?"; 
      if (confirm(msg)) { 
       $(':checkbox[id^="prod_"]:checked').each(function(){ 
        var type = "",id=""; 
        if($(this).val() == "") { // delete secteur 
         type = "secteur"; 
         var tabIdx = $(this).attr("id").substr(5); 
         id = $("#secteur_"+tabIdx).val(); 
        } else {     // delete produit 
         type = "produit"; 
         id = $(this).val(); 
        } 
        $.ajax({ 
         data: "type="+type+"&id="+id, 
         type: "POST", 
         url: "<?php echo HTTP_AJAX ?>service/SupprimerSecteursProduitsUserAjax.php", // deleting database row 
         async: false 
        }); 
       }); 
       rechercheSecteursEtProduits(0); // this causes the bug : the "delete" button does not work anymore after this code is called ! 
      } 
     } 
    }); 
+1

Возможно, правильно. Причина в том, что при замене содержимого 'div',' btnSupprimer' заменяется новым элементом с тем же 'id', который не имеет прикрепленного к нему события' click'. '$ ('# btnSupprimer'). on (" click ")' означает, что в дальнейшем будет добавлено что-либо под названием 'btnSupprimer', добавленное на страницу в будущем. '$ ('# btnSupprimer'). click()' просто добавляет текущий экземпляр и ничего больше. – Rhumborl

0

Используйте динамический селектор JQuery вместо обычного 'нажмите кнопку' событие

$('#liste_secteurs').on('click', '#btnSupprimer', function() {});

// $("container").on("event", "button", function() {});

1

Из того, что я при чтении у вас возникают проблемы с строкой, добавленной из базы данных. Что может быть проблема, когда вы выполняете этот мир кода:

$('#btnSupprimer').click(function() { // btnSupprimer = button generated from an ajax called inside previous function "rechercheSecteursEtProduits" 

При вызове $ .click() Функция добавления событие для всех существующего объекта DOM, которые имеют идентификатор «btnSupprimer» , однако это не обновляется, если вы добавляете новый объект DOM. Так что вам следует делать эту функцию каждый раз, когда вы добавляете новую строку. вы получите что-то подобное:

function rechercheSecteursEtProduits(pn){ 

     var user = "<?php echo $_SESSION[CODE_USER]; ?>"; 
     var html = $.ajax({ 
      data: "id_user="+user, 
      type: "POST", 
      url: "<?php echo HTTP_AJAX ?>service/ListerProduitsUserParSecteursAjax.php?pn=" + pn, 
      async: false 
     }).responseText; 

     $('#liste_secteurs').html(html); 
     $('#btnSupprimer').click(addClickHandler()); // this is the div element 

    } 


function addClickHandler(){ 
     if ($(':checkbox[id^="prod_"]:checked').length > 0) { 
      var msg = "Do you want to remove these records ?"; 
      if (confirm(msg)) { 
       $(':checkbox[id^="prod_"]:checked').each(function(){ 
        var type = "",id=""; 
        if($(this).val() == "") { // delete secteur 
         type = "secteur"; 
         var tabIdx = $(this).attr("id").substr(5); 
         id = $("#secteur_"+tabIdx).val(); 
        } else {     // delete produit 
         type = "produit"; 
         id = $(this).val(); 
        } 
        $.ajax({ 
         data: "type="+type+"&id="+id, 
         type: "POST", 
         url: "<?php echo HTTP_AJAX ?>service/SupprimerSecteursProduitsUserAjax.php", // deleting database row 
         async: false 
        }); 
       }); 
       rechercheSecteursEtProduits(0); // this causes the bug : the "delete" button does not work anymore after this code is called ! 
      } 
     } 
    } 

Я надеюсь, что это помогает

+0

это решение! Я внесла некоторые изменения, см. Мой ответ ниже :) – pheromix

Смежные вопросы