@Grey777

Как добиться выполнения стилей Bootstrap для добавленного, после Ajax-запроса, фрагмента HTML кода?

При создании выпадающего меню, состоящего из двух списков select, столкнулся с тем, что после успешного выполнения Ajax-запроса на формирование второго списка select, второй список select изменяет свой вид и стили. В процессе подгрузки фрагмента кода не учитывается атрибут "data-live-search" (поле поиска списка). При применении класса selectpicker фреймворка Bootstrap выпадающий список вообще не отображается. Что можно сделать для того, чтобы списки имели одинаковый стиль и функционал? Выкладываю код двух файлов: index.php и findState.php

Файл index.php:
<!DOCTYPE HTML>
<html>
<head>
	<meta http-equiv="content-type" content="text/html" />
	<meta charset="utf-8">
    
	<title>Select country</title>
    
    <!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css"/>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/css/bootstrap-select.min.css">
<style>
body {
    padding-top: 70px;
}
</style>

<script language="javascript" type="text/javascript">
function getXMLHTTP() {
		var xmlhttp=false;	
		try{
			xmlhttp=new XMLHttpRequest();
		}
		catch(e)	{		
			try{			
				xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e){
				try{
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
				}
				catch(e1){
					xmlhttp=false;
				}
			}
		}
		 	
		return xmlhttp;
    }
	
	function getState(countryId) {		
		
		var strURL="findState.php?country="+countryId;
		var req = getXMLHTTP();
        
		if (req) {
			
			req.onreadystatechange = function() {
				if (req.readyState == 4) // Запрос отправлен 
                {
					// only if "OK"
					if (req.status == 200) // Ответ получен
                    {						
						document.getElementById('statediv').innerHTML=req.responseText;
						document.getElementById('citydiv').innerHTML='<select name="city">'+
						'<option>Выбрать город js</option>'+
				        '</select>';						
					} else {
						alert("Problem while using XMLHTTP:\n" + req.statusText);
					}
				}				
			}			
			req.open("GET", strURL, true);
			req.send(null);
		}		
	}
	
</script>
</head>
<body>

<div class="container">
    <form action="" name="form" method="post">
        <div class="form-group row">
            <div class="col-lg-3">
                <label>Country</label>
                <select name="country" 
                        class="selectpicker form-control" 
                        onChange="getState(this.value)"
                        data-container="body" 
                        data-live-search="true" 
                        title="Select country" 
                        data-hide-disabled="true">
                    <option value="">Select country</option>
	                <option value="1">USA</option>
                    <option value="2">Canada</option>
                 </select>
            </div>
            
            <div class="col-lg-3" id="statediv">
                <label>State1</label>
                <select name="state"
                        class="selectpicker form-control"
                        onchange="getCity(1,this.value)"
                        data-container="body" 
                        data-live-search="true" 
                        title="Select state1" 
                        data-hide-disabled="true">
                    <option>Select state</option>
                    
                 </select>
            </div>
        </div>
    </form>
</div>

<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap-select@1.13.14/dist/js/bootstrap-select.min.js"></script>

</body>
</html>


Файл findState.php:
<html>
<head>
<body>
<label>State2</label>
<select name="state"
        class=" form-control" 
        onchange="getCity('1',this.value)"
        data-container="body" 
        data-live-search="true" 
        title="Select state 2" 
        data-hide-disabled="true"
        >
    <option>Select state 2</option>
    <option value="1">Alaska</option>
    <option value="2">Colorado</option>
    <option value="3">Quebec</option>
    <option value="4">Alberta</option>
    
</select>
</body>
</head>
</html>
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 2
mrusklon
@mrusklon
Не получается? Яростно гугли!
каким образом это должно работать вообще?
внутрь id statediv должен вставлятся такой код?
spoiler
<html>
<head>
<body>
<label>State2</label>
<select name="state"
        class=" form-control" 
        onchange="getCity('1',this.value)"
        data-container="body" 
        data-live-search="true" 
        title="Select state 2" 
        data-hide-disabled="true"
        >
    <option>Select state 2</option>
    <option value="1">Alaska</option>
    <option value="2">Colorado</option>
    <option value="3">Quebec</option>
    <option value="4">Alberta</option>
    
</select>
</body>
</head>
</html>


почему бы не пойти стандартным путем с json?
Или вообще раз у вас все так просто, без БД и просто php файл, можно переменные какие то подставлять...
Ответ написан
Комментировать
@Grey777 Автор вопроса
1. Да, внутрь id statediv должен вставляться код из файла findState. php.
2. Вставка этого кода, - это результат выполнения скрипта и вопрос в том, что при подгрузке этого кода, на странице index. php теряются стили в <div class="col-lg-3" id="statediv">
В частности пропадает окно поиска: data-live-search="true".
3. Данные в поля select должны погружаться из бд MySQL, но я не стал грузить лишним кодом, т. к. сути это не меняет. Что нужно сделать, чтобы после выполнения запроса стили сохранялись?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы