2017-10-13 62 views
0

我使用JQuery在用戶單擊按鈕時將新內容(具有Materialize select下拉列表)加載到div中。然而,一個新的div被加載,選擇下拉式不起作用。這是我如何做到這一點,任何幫助表示讚賞。物化下拉菜單在jquery重新加載後無法工作

<script> 
    $(document).ready(function(){ 
     $("#second-page").hide(); 
     $("#continue-button").click(function(){ 
     var $second_page_content=$("#second-page").html(); 
     $("#first-page").html($second_page_content); 
     $("#second-page").trigger('contentChanged'); 
     }); 
    $("select").on('contentChanged', function(){ 
      $(this).material_select(); 
    }); 
    }); 
    </script> 


<div class="row" id="first-page"> 
    <form> 
    <div class = "row"> 
    <select id="animal"> 
     <option value = "bird">Bird</option> 
     <option value = "cat">Cat</option> 
     <option value = "Insect">Insect</option> 
    </select> 
    </div> 
    <button class="btn waves-effect waves-light" id="continue-button">CONTINUE</button> 
    </form> 
</div> 

<div class="row" id="second-page"> 
<form> 
    <div class = "row"> 
    <select id="animal-type"> 
     <option value = "hen">Hen</option> 
     <option value = "lion">Lion</option> 
     <option value = "butterfly">Butterfly</option> 
    </select> 
    </div> 
</form> 
</div> 
+0

你可能必須委託select事件到其父,甚至到文檔它的自我 – SubjectDelta

+0

從不同的文件這兩個DIV?否則,您可以顯示/隱藏它們,而不是移動html內容,以防止事件與其所有者分離 – SubjectDelta

+0

@SubjectDelta,div的顯示/隱藏不起作用,因爲在加載內容之前恢復了以前的狀態,即第一頁顯示,第二頁隱藏。它必須是.html()方法,觸發document.ready再次將元素設置爲它們的初始狀態,或者什麼 – user2970374

回答

0

如果替換第二頁,select元素也會被替換,因此click處理程序不再被調用。要麼替換後重新連接點擊處理程序,要麼在on()調用中使用選擇器參數。

0

讓我們寫下我建議的評論... 這應該做的伎倆:

$('#second-page').on('contentChanged', 'select', function() { 
    $(this).material_select(); 
}); 

但我建議你多像

$("#continue-button").click(function() { 
    $("#first-page").hide(); 
    $("#second-page").show(); 
}); 

UPDATE

我在第一次閱讀時沒有讀到這個$("#second-page").trigger('contentChanged');,你實際上在0123上觸發了這個事件而不是那些選擇,所以......

$('#second-page').on('contentChanged', function() { 
    $(this).find('select').material_select(); 
}); 

否則,如果你想保持你的第一個想法,你必須觸發選擇該事件這樣

$("#second-page").find('select').trigger('contentChanged'); 

最後更新

你可能會添加你沒有寫在你的問題中的代碼,因爲這應該是一個非常簡單的任務...你的表單是假的,沒有提交任何地方,沒有重新加載,只是一個神祕的material_select ...

我試圖重寫你的東西,它的工作原理就像我建議你的。

好運

$(document).ready(function(){ 
 
    $('#continue-button').click(function(){ 
 
    $('#first-page').hide(); 
 
    $('#second-page').show(); 
 
    $('#animal-type').material_select(); 
 
    }); 
 
});
#second-page { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="row" id="first-page"> 
 
    <div class = "row"> 
 
    <select id="animal"> 
 
     <option value = "bird">Bird</option> 
 
     <option value = "cat">Cat</option> 
 
     <option value = "Insect">Insect</option> 
 
    </select> 
 
    </div> 
 
    <button class="btn waves-effect waves-light" id="continue-button"> 
 
    CONTINUE 
 
    </button> 
 
</div> 
 

 
<div class="row" id="second-page"> 
 
    <div class = "row"> 
 
    <select id="animal-type"> 
 
     <option value = "hen">Hen</option> 
 
     <option value = "lion">Lion</option> 
 
     <option value = "butterfly">Butterfly</option> 
 
    </select> 
 
    </div> 
 
</div>

+0

感謝您的回答。問題的原理不是關於美麗的形式,只是如何使物化選擇動態加載內容的工作。 – user2970374

+0

您的解決方案是隱藏/顯示,再次調用material_select不是必需的(點擊按鈕時不會加載新內容)。 'event.preventDefault'是防止頁面重新加載/重新顯示首頁所必需的。工作解決方案是這樣的; '''$(document)。ready(function(){('#second-page')。hide(); $('#continue-button')。click(function(){ event.preventDefault(); $('## ('#second-page')。show(); }); });''' – user2970374

相關問題