【问题标题】:Dynamic select not working with Materialize动态选择不适用于 Materialise
【发布时间】:2016-10-20 06:55:13
【问题描述】:

materialize css 不适用于动态选择。它在国家/地区工作得很好,但没有显示国家。

我认为 jquery 有问题。

请检查我的代码 sn-p。

我已经检查了互联网上的所有内容。但对我没有任何作用。

var country_arr = new Array("Afghanistan", "Albania", "Algeria", "American Samoa", "Angola", "Anguilla", "Antartica", "Antigua and Barbuda", "Argentina", "Armenia" );

// States
var s_a = new Array();
s_a[0]="";
s_a[1]="Badakhshan|Badghis|Baghlan|Balkh|Bamian|Farah|Faryab|Ghazni|Ghowr|Helmand|Herat|Jowzjan|Kabol|Kandahar|Kapisa|Konar|Kondoz|Laghman|Lowgar|Nangarhar|Nimruz|Oruzgan|Paktia|Paktika|Parvan|Samangan|Sar-e Pol|Takhar|Vardak|Zabol";
s_a[2]="Berat|Bulqize|Delvine|Devoll (Bilisht)|Diber (Peshkopi)|Durres|Elbasan|Fier|Gjirokaster|Gramsh|Has (Krume)|Kavaje|Kolonje (Erseke)|Korce|Kruje|Kucove|Kukes|Kurbin|Lezhe|Librazhd|Lushnje|Malesi e Madhe (Koplik)|Mallakaster (Ballsh)|Mat (Burrel)|Mirdite (Rreshen)|Peqin|Permet|Pogradec|Puke|Sarande|Shkoder|Skrapar (Corovode)|Tepelene|Tirane (Tirana)|Tirane (Tirana)|Tropoje (Bajram Curri)|Vlore";
s_a[3]="Adrar|Ain Defla|Ain Temouchent|Alger|Annaba|Batna|Bechar|Bejaia|Biskra|Blida|Bordj Bou Arreridj|Bouira|Boumerdes|Chlef|Constantine|Djelfa|El Bayadh|El Oued|El Tarf|Ghardaia|Guelma|Illizi|Jijel|Khenchela|Laghouat|M'Sila|Mascara|Medea|Mila|Mostaganem|Naama|Oran|Ouargla|Oum el Bouaghi|Relizane|Saida|Setif|Sidi Bel Abbes|Skikda|Souk Ahras|Tamanghasset|Tebessa|Tiaret|Tindouf|Tipaza|Tissemsilt|Tizi Ouzou|Tlemcen";
s_a[4]="Eastern|Manu'a|Rose Island|Swains Island|Western";
s_a[5]="Andorra la Vella|Bengo|Benguela|Bie|Cabinda|Canillo|Cuando Cubango|Cuanza Norte|Cuanza Sul|Cunene|Encamp|Escaldes-Engordany|Huambo|Huila|La Massana|Luanda|Lunda Norte|Lunda Sul|Malanje|Moxico|Namibe|Ordino|Sant Julia de Loria|Uige|Zaire";
s_a[6]="Anguilla";
s_a[7]="Antartica";
s_a[8]="Barbuda|Redonda|Saint George|Saint John|Saint Mary|Saint Paul|Saint Peter|Saint Philip";
s_a[9]="Antartica e Islas del Atlantico Sur|Buenos Aires|Buenos Aires Capital Federal|Catamarca|Chaco|Chubut|Cordoba|Corrientes|Entre Rios|Formosa|Jujuy|La Pampa|La Rioja|Mendoza|Misiones|Neuquen|Rio Negro|Salta|San Juan|San Luis|Santa Cruz|Santa Fe|Santiago del Estero|Tierra del Fuego|Tucuman";
s_a[10]="Aragatsotn|Ararat|Armavir|Geghark'unik'|Kotayk'|Lorri|Shirak|Syunik'|Tavush|Vayots' Dzor|Yerevan";
// <!-- -->



function populateStates( countryElementId, stateElementId ){
	
	var selectedCountryIndex = document.getElementById( countryElementId ).selectedIndex;

	var stateElement = document.getElementById( stateElementId );
	
	stateElement.length=0;	// Fixed by Julian Woods
	stateElement.options[0] = new Option('Select State','');
	stateElement.selectedIndex = 0;
	
	var state_arr = s_a[selectedCountryIndex].split("|");
	
	for (var i=0; i<state_arr.length; i++) {
		stateElement.options[stateElement.length] = new Option(state_arr[i],state_arr[i]);
	}
  $("#" + stateElementId).material_select();
}

function populateCountries(countryElementId, stateElementId){
	// given the id of the <select> tag as function argument, it inserts <option> tags
	var countryElement = document.getElementById(countryElementId);
	countryElement.length=0;
	countryElement.options[0] = new Option('Select Country','-1');
	countryElement.selectedIndex = 0;
	for (var i=0; i<country_arr.length; i++) {
		countryElement.options[countryElement.length] = new Option(country_arr[i],country_arr[i]);
	}

	// Assigned all countries. Now assign event listener for the states.

	if( stateElementId ){
		countryElement.onchange = function(){
			populateStates( countryElementId, stateElementId );
		};
	}
}

populateCountries("country", "state");

$(function () {
    $(document).ready(function () {
        var max_fields = 10; //maximum input boxes allowed
        var wrapper = $("#raghav"); //Fields wrapper
        var add_button = $(".addmore"); //Add button ID

        var x = 1; //initlal text box count
        $(add_button).click(function (e) { //on add input button click
            e.preventDefault();
            if (x < max_fields) { //max input box allowed
                x++; //text box increment
                $(wrapper).append('Select Country: <select id="country'+x+'" name="country" class="country"></select>  Select State: <select id="state'+x+'" name="state" class="state"></select>');
				
                populateCountries("country"+x+"", "state"+x+"");

            }
        });
});

});
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/css/materialize.min.css">
</head>
<body>
<div class="form-group" id="raghav">  
Select Country:<select id="country" name ="country" ></select> 
Select State: <select name ="state" id ="state" class="state"></select> 
</div>  
  
<div class="button-div">
    <input type="button" name="addmore" class="addmore" value="Add More">
    </div>  
  
    

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/js/materialize.min.js"></script> 
     <script>
     $(document).ready(function() {
        $('select').material_select();     //select js
    });
  </script>
</body>

【问题讨论】:

    标签: javascript jquery css select materialize


    【解决方案1】:

    material_select().selectlioptions 创建一个列表ul,然后shows 这个ul 为dropdown,当您调用material_select 时,只有国家下拉列表中填充了数据和@ 987654329@ 仅为此创建,因此其options 正在显示。

    当您填充状态下拉列表 ul 时,它没有创建,因此它不会显示您在填充状态下拉列表时需要调用 material_select

    function populateStates( countryElementId, stateElementId ){
    
        var selectedCountryIndex = document.getElementById( countryElementId ).selectedIndex;
    
        var stateElement = document.getElementById( stateElementId );
    
        stateElement.length=0;  // Fixed by Julian Woods
        stateElement.options[0] = new Option('Select State','');
        stateElement.selectedIndex = 0;
    
        var state_arr = s_a[selectedCountryIndex].split("|");
    
        for (var i=0; i<state_arr.length; i++) {
            stateElement.options[stateElement.length] = new Option(state_arr[i],state_arr[i]);
        }
        $("#" + stateElementId).material_select();
    }
    

    【讨论】:

    • 感谢工作。感谢帮助。在互联网上搜索这个终于找到了我要找的东西
    • 您可以通过添加更多按钮来做到这一点。我添加了一个克隆国家和州的按钮,但问题是在您的代码的帮助下,我只能显示列表的第一个实例。其余克隆已创建,但未显示列表。下面是我添加更多的代码。
    • $(function () { $(document).ready(function () { var max_fields = 10; var wrapper = $("#raghav"); //Fields wrapper var add_button = $( ".addmore"); //添加按钮 ID var x = 1; //初始文本框计数 $(add_button).click(function (e) { e.preventDefault(); if (x Select State: '); populateCountries("country"+x+"", "state"+x+""); } } ); }); });
    • 就像我们对状态下拉菜单所做的那样,当一个新的下拉菜单被创建或者在它被填充数据之后,而不是应用 material_select 。这将解决您的问题。
    • 请看一下我在我的代码 sn-p 中添加了一个添加更多按钮。我尝试在该下拉列表中添加 material_select 但似乎没有重新设计
    猜你喜欢
    • 1970-01-01
    • 2016-05-05
    • 2019-07-08
    • 2017-07-15
    • 2015-11-27
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2016-04-01
    相关资源
    最近更新 更多