погоди, он хотябы в адеквате.
я конечно прошу прощения за грубость, но я бы за такой код хуй оторвал.
Форум → Программирование → JavaScript → проблемы с динамическими select'ами
проблемы с динамическими select'ами
Страницы: ← Предыдущая страница • Следующая страница →
-
21 сентября 2009 г. 17:53, спустя 10 минут 41 секунду
-
21 сентября 2009 г. 17:54, спустя 57 секунд
про его адекватность я ничего покачто еще не говорил.
погоди, он хотябы в адеквате.
я конечно прошу прощения за грубость, но я бы за такой код хуй оторвал. -
22 сентября 2009 г. 10:02, спустя 16 часов 7 минут 50 секунд
Пожалуйста, посмотрите мой код, описанный выше я там что-то напортачил с передачей backend'у параметров. -
22 сентября 2009 г. 10:36, спустя 34 минуты 21 секунду
gvik, покажи как теперь выглядит код, со всеми исправлениями
И еще, используй "<?php", а не "<?"https://smappi.org/ - платформа по созданию API на все случаи жизни -
22 сентября 2009 г. 10:55, спустя 19 минут 3 секунды
Спасибо за совет. Я всегда так использую, так написано в книге Котерова.
select.php
<?php
ini_set('display_errors',1);
error_reporting(E_ALL ^E_NOTICE);
$db = mysql_connect ("localhost", "root", "");
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
mysql_select_db("cars",$db);
?>
<script src="JsHttpRequest.js"></script>
<script>
function doload(value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result").innerHTML=req.responseText;}
req.open(null,"select2.php",true);
req.send({brand:value});
}
function doload1(value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result1").innerHTML=req.responseText;}
req.open(null,"select3.php",true);
req.send({brand:value, model:value});
}
function doload2(value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result2").innerHTML=req.responseText;}
req.open(null,"select4.php",true);
req.send({brand:value, model:value, body:value});
}
</script>
<form action="script.php" method="POST">
<select name="brand" id="brand" onchange="doload(this.value);">
<option value="no_action">–Выберите марку–</option>
<?php
$sql = mysql_query ("SELECT DISTINCT brand FROM t1");
while ($new_brand = mysql_fetch_array($sql))
echo '<option value='.$new_brand['brand'].'>'.$new_brand['brand'].'</option>';
?>
</select>
<br><br>
<div id="result"></div>
<br>
<div id="result1"></div>
<br>
<div id="result2"></div>
<input type="submit" value="Найти">
</form>
select2.php<?php
$db = mysql_connect ("localhost", "root", "");
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
mysql_select_db("cars",$db);
require("JsHttpRequest.php");
$JsHttpRequest=new JsHttpRequest("windows-1251");
?>
<select name="model" id="model" onchange="doload1(this.value, this.value);">
<option value="no_action">–Выберите модель–</option>
<?php
$sql = mysql_query ('SELECT DISTINCT model FROM t1 WHERE brand = "'.mysql_real_escape_string($_REQUEST["brand"]).'"');
if($sql) {
while ($new_model= mysql_fetch_array($sql)) {
echo '<option value="'.$new_model['model'].'">'.$new_model['model'].'</option>';
}
} else {
echo mysql_error();
}
?>
</select>
select3.php<?php
$db = mysql_connect ("localhost", "root", "");
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
mysql_select_db("cars",$db);
require("JsHttpRequest.php");
$JsHttpRequest=new JsHttpRequest("windows-1251");
?>
<select name="body" id="body" onchange="doload2(this.value, this.value, this.value);">
<option value="no_action">–Выберите тип кузова–</option>
<?php
$sql = mysql_query ('SELECT DISTINCT body FROM t1 WHERE brand = "'.mysql_real_escape_string($_REQUEST["brand"]).'" AND model = "'.mysql_real_escape_string($_REQUEST["model"]).'"');
if($sql) {
while ($new_body= mysql_fetch_array($sql)) {
echo '<option value="'.$new_body['body'].'">'.$new_body['body'].'</option>';
}
} else {
echo mysql_error();
}
?>
</select>
select4.php<?php
$db = mysql_connect ("localhost", "root", "");
mysql_query ("set character_set_client='cp1251'");
mysql_query ("set character_set_results='cp1251'");
mysql_query ("set collation_connection='cp1251_general_ci'");
mysql_select_db("cars",$db);
require("JsHttpRequest.php");
$JsHttpRequest=new JsHttpRequest("windows-1251");
?>
<select name="fuel" id="fuel">
<option value="no_action">–Выберите тип топлива–</option>
<?php
$sql = mysql_query ('SELECT DISTINCT fuel FROM t1 WHERE brand = "'.mysql_real_escape_string($_REQUEST["brand"]).'" AND model = "'.mysql_real_escape_string($_REQUEST["model"]).'" AND model = "'.mysql_real_escape_string($_REQUEST["body"]).'"');
if($sql) {
while ($new_fuel= mysql_fetch_array($sql)) {
echo '<option value="'.$new_fuel['fuel'].'">'.$new_fuel['fuel'].'</option>';
}
} else {
echo mysql_error();
}
?>
</select> -
22 сентября 2009 г. 11:19, спустя 23 минуты 51 секунду
Я всегда так использую, так написано в книге Котерова.
Однако в предыдущих листингах вашего кода - вы используете короткую запись :)Спустя 105 сек.onchange="doload1(this.value, this.value);"
Почему вы передаете 2 параметра, когда в функции определен только один?Спустя 215 сек.<script>
function doload(value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result").innerHTML=req.responseText;}
req.open(null,"select2.php",true);
req.send({brand:value});
}
function doload1(value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result1").innerHTML=req.responseText;}
req.open(null,"select3.php",true);
req.send({brand:value, model:value});
}
function doload2(value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result2").innerHTML=req.responseText;}
req.open(null,"select4.php",true);
req.send({brand:value, model:value, body:value});
}
</script>
У вас эти функции отличатся только тем, что используются разные бекенды, тогда можно сделать функцию, в которую можно передавать имя бекенда.
<script>
function doload(value, backend){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result").innerHTML=req.responseText;}
req.open(null, backend, true);
req.send({brand:value});
}
</script>
И в onchange передавать название бекенда, примерно так:
onchange="doload(this.value, 'select.php');"
onchange="doload(this.value, 'select2.php');"
onchange="doload(this.value, 'select3.php');"https://smappi.org/ - платформа по созданию API на все случаи жизни -
22 сентября 2009 г. 11:25, спустя 6 минут 4 секунды
Однако в предыдущих листингах вашего кода - вы используете короткую запись :)
В своём коде я пишу всегда, а вот с чужим проскальзывают такие места)))
Вот исправленный <script>, я правильно исправил?<script>
function doload(value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result").innerHTML=req.responseText;}
req.open(null,"select2.php",true);
req.send({brand:value});
}
function doload1(value, value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result1").innerHTML=req.responseText;}
req.open(null,"select3.php",true);
req.send({brand:value, model:value});
}
function doload2(value, value, value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result2").innerHTML=req.responseText;}
req.open(null,"select4.php",true);
req.send({brand:value, model:value, body:value});
}
</script> -
22 сентября 2009 г. 11:29, спустя 4 минуты
Вот исправленный <script>, я правильно исправил?
сделай одну функцию, как я описал выше…https://smappi.org/ - платформа по созданию API на все случаи жизни -
22 сентября 2009 г. 11:30, спустя 55 секунд
можно сделать функцию, в которую можно передавать имя бекенда.
Это верно, но с увеличение select'ов в бекендах увекличивается кол-во параметров в SQL-запросах, вот этот аспект меняч смущает. получается я должен в бекенды передавать много параметров или есть другой способ? -
22 сентября 2009 г. 12:00, спустя 29 минут 42 секунды
gvik, либо разбивать данные на несколько таблиц (идентификатор=>значение), либо передавать несколько параметров в SQLhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
22 сентября 2009 г. 12:18, спустя 18 минут 19 секунд
adw0rd, а как правильно в функции объявить параметры и передать их, а то что-то мой синтаксис не работает?function doload2(value, value1, value2){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result2").innerHTML=req.responseText;}
req.open(null,"select4.php",true);
req.send({brand:value, model:value1, body:value2});onchange="doload2(this.value, this.value1, this.value2);
-
22 сентября 2009 г. 12:28, спустя 10 минут 2 секунды
gvik, конечно не будет работать, ты понимаешь что такое "this.value"? Это значение которые ты выбрал в списке.
А что такое "this.value1" и "this.value2"только одному тебе известно :)
Тебе надо брать значения из соседних списков, либо храниться эти значения, например в форме со скрытыми полями
<form>
<input id="select1" type="hidden" />
<input id="select2" type="hidden" />
</form>
И в doload записывать и вынимать значения оттуда
function doload1(value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result1").innerHTML=req.responseText;
}
document.getElementById("select1").value = value;
req.open(null,"select1.php",true);
req.send({brand:value});
}
А при следуещем селекте записывать и вытаскивать предыдущий
function doload2(value){
var req=new JsHttpRequest();
req.onreadystatechange=function(){
if(req.readyState==4) document.getElementById("result2").innerHTML=req.responseText;
}
var select1 = document.getElementById("select1").value;
document.getElementById("select2").value = value;
req.open(null,"select2.php",true);
req.send({brand:select1, model: value});
}https://smappi.org/ - платформа по созданию API на все случаи жизни -
22 сентября 2009 г. 12:45, спустя 16 минут 29 секунд
adw0rd, Спасибо большое работает, а что в функции нужно изменить чтобы все select'ы были сразу видны или это надо в свойстве select'а написать visibled? -
22 сентября 2009 г. 12:51, спустя 6 минут 33 секунды
сейчас у вас генерируется каждый по мере выполнения выбора в списке (onchange)
adw0rd, Спасибо большое работает, а что в функции нужно изменить чтобы все select'ы были сразу видны или это надо в свойстве select'а написать visibled?
а вам надо сразу все вывести селлекты и все. а при онченже заменять соответствующий селектСпустя 144 сек.Когда-то давно я уже делал подобную форму, тоже связанную с автомобилями и марками http://pyha.ru/forum/topic/433.0https://smappi.org/ - платформа по созданию API на все случаи жизни -
22 сентября 2009 г. 13:02, спустя 10 минут 29 секунд
adw0rd, Спасибо, я уже читал эту ветку, но тогда ничего не понял и закрыл, а теперь буду уже осмысленно перечитывать. Спасибо большое!
Страницы: ← Предыдущая страница • Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!