2015-11-09 4 views
1

У меня есть раскрывающийся список, который, когда пользователь выбирает элемент из него, отображает частичное с соответствующими данными. Но если пользователь изменяет выбор ddl, то ранее отображаемый контент должен быть заменен текущим контентом.Поведение Firebug при выборе элемента из выпадающего списка

Ниже приведен код

Script

<script> 
     var prev; 
     $(document).on('focus', '.class03', function() { 
      prev = $(this).val(); 
     }).on('change', '.class03', function() { 
      if (prev != "") { 
       $('.cmpCls').last().remove(); 
       alert(prev); 
       $.ajax({ 
        url: '@Url.Action("ComponentDts", "InquiryOrder")', // dont hard code your url's 
        type: "GET", 
        data: { DesignCdId: $(this).val() }, // pass the selected value 
        success: function (data) { 
         $('#cmpDts').append(data); 
        } 
       }); 
      } 
      else { 
       $.ajax({ 
        url: '@Url.Action("ComponentDts", "InquiryOrder")', // dont hard code your url's 
        type: "GET", 
        data: { DesignCdId: $(this).val() }, // pass the selected value 
        success: function (data) { 
         $('#cmpDts').append(data); 
        } 
       }); 
      } 
     }); 
     </script> 

Div добавлять ОКАЗАННЫХ Частичный вид

<div id="cmpDts"> 

</div> 

Вот что смущает меня, когда я использую поджигатель, скрипт работает отлично заменяя ранее отображаемый контент в div 'cmpDts', когда пользователь меняет выбор выпадающего списка.

Но когда я запускаю приложение без firebug, и когда пользователь меняет выбор ddl, вместо замены предыдущего содержимого в div он продолжает добавлять в div без удаления предыдущего содержимого.

Я думаю, что без firebug, каждый раз, когда дело доходит до else, часть независимо от того, prev имеет значение или нет. Я мог бы признать, что because alert не уволен без firebug здесь. Я смущен этим поведением. Вся помощь была оценена. Благодаря!

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

<script> 
     var prev; 
     $(document).on('focus', '.class03', function() { 
      prev = $(this).val(); 
     }).on('change', '.class03', function() { 
      if (prev != "") { 
       //$('.cmpCls').last().remove(); 
       alert("If"); 
       $.ajax({ 
        url: '@Url.Action("ComponentDts", "InquiryOrder")', // dont hard code your url's 
        type: "GET", 
        data: { DesignCdId: $(this).val() }, // pass the selected value 
        success: function (data) { 
         $('.cmpCls').last().replaceWith(data); 
        } 
       }); 
      } 
      else { 
       alert("Else"); 
       $.ajax({ 
        url: '@Url.Action("ComponentDts", "InquiryOrder")', // dont hard code your url's 
        type: "GET", 
        data: { DesignCdId: $(this).val() }, // pass the selected value 
        success: function (data) { 
         $(".class03 option[value='']").remove() ; 
         $('#cmpDts').append(data); 
        } 
       }); 
      } 
     }); 
     </script> 
+0

Что произойдет, если нажать Ctrl + F5, чтобы перезагрузить страницу, а затем попробовать снова? Возможно, ваш браузер использует кешированную версию без firebug. –

+0

@L Ja, Спасибо, что ответили. Да, я сделал это. Но все равно продолжает добавлять в div. Как вы думаете, правильно ли я написал сценарий? – Isuru

+1

О, вы хотите, чтобы он заменил контент? В этом случае используйте '.html()' вместо '.append()'. .'append() 'вставляет новое значение за текущее значение. '.html()' заменяет его. –

ответ

1

Вы в первую очередь нужно ждать вашего документа чтобы быть готовым:

$(document).ready(function(){ 

}); 

Теперь вы хотите проверить, что-то в .class03 изменилось.

$(document).ready(function(){ 
    var prev; 
    $(".class03").focus(function(){ prev = $(this).val(); }); 

    $(".class03").change(function(){ 
     if (prev !== "") { $('.cmpCls').last().remove(); } 
      alert(prev); 
      $.ajax({ 
       url: '@Url.Action("ComponentDts", "InquiryOrder")', // dont hard code your url's 
       type: "GET", 
       data: { DesignCdId: $(this).val() }, // pass the selected value 
       success: function (data) { 
        $('#cmpDts').append(data); 
       } 
      }); 
    }); 
}); 

Попробуйте это.

Edit: убрана двойной код

+0

@L Ja, Спасибо за ответ. Ваше предыдущее предложение использовать 'html' является правильным. Он решил начальную проблему. Но теперь для других ddls он также начал заменяться без добавления, когда я использую 'html'. И также я полагаю, что, поскольку я динамически генерирую этот контент, я должен использовать 'on' и связывать событие с уже существующим div, который я уже сделал в своем скрипте. – Isuru

+1

В этом случае вам нужно проверить, является ли раскрывающийся список тем, который должен быть добавлен или заменен. Возможно, добавьте функцию data-function = "html" в html, затем data-function = "append" в append. На ваш успех проверьте 'if ($ (this) .attr (" data-function ") ===" html ") {$ (" # cmpDts "). Html (data)} else if ($ this.attr (" data-function ") ===" append ") {$ (" # cmpDts "). append (data); } ' –

+0

Хорошо, я попробую это. Спасибо! – Isuru

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