Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.04.2011, 20:46
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 21.02.2011
Сообщений: 160

Связанные списки
На PHP сделал все быстро все работает, по такому принципу
1. Появляется первый список и кнопка выбрал,
2. по нажатию происходит проверка переданных данных
3. Появляется тоже список с уже выбранным элементов в заблокированном состоянии, и второй список список где пользователь выбирает то что ему нужно.
На Javascript планировалось так
1. Появляется все списки сразу но активен только 1 choose_razdel
2. Если поддержка Javascript включена то,
$(document).ready(function(){
	$(".sub_raz").hide();//скрываем кнопку
	$("<br /><br /><select name='choose_part' id='choose_part' class='choose_part'><option value='default' name='chP' selected>Выберите категорию</option></select><br /><br /><textarea name='smsText' cols='40' rows='10' class='smsText' wrap='hard' disabled></textarea><br /><br /><input name='postToemail' type='checkbox' class='postToemail' value='1' disabled/>&nbsp;<label for='postToemail'>Уведомить по e-mail о результатах проверки модератора </label><br /><br /><input name='sub_part' type='submit' value='Сохранить SMS' disabled/>").insertAfter(".choose_razdel");
//вставляем всю форму после 1 списка
	$(".choose_razdel").change(function(){
//при изменение выбора 
		var razdelValue = $('.choose_razdel').val();
		var part = $('.choose_part');
		if (razdelValue == 'default'){
//если выбрано значение пл умолчанию
		var option = new Option("Выберите раздел","default");
          if($.support.cssFloat) {
            part.add(option,null);
          } else {
            part.add(option);
          }
		part.attr('disabled','disabled');
		}
//если выбрано значение отлично от умочания		
		if(razdelValue.length != 0 && razdelValue != 'default') {
		 part.attr('disabled','');
		 part.options.length = 0;
		$.getJSON("ajax.php",{razdel:razdelValue},
		function(dataArray,status) {
			if (status == 'error') {
			$('#otvet').html("Ошибка при загрузке");
			}
			if (status == 'success') {
			$('#otvet').html("Данные получены");
			}
			$.each(dataArray,function(index,data){
          	var option = new Option(data,index);
//просто проверяем что значения получены и могут быть прочитаны
			alert(data+' '+index); 
			  if($.support.cssFloat) {
				part.add(option,null);
			  } else {
				part.add(option);
			  }		
        	});		
		});
		}

	});
});


Код PHP не сколько запутан из-за того что сайт в 1251 кодировке, а ajax работает только с UTF-8

<?php 
include_once "connect_db.php";
include_once "auth/quote_smart.php";
header('Content-Type: text/html; charset=utf-8');
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
	exit('Данные отправлены не через AJAX');
}
if (isset($_REQUEST['razdel'])){	
	echo show_part();
} else {
    echo json_encode('Данные не получены');
 }

function show_part(){
$choose_razdel=$_REQUEST['razdel'];
$choose_razdel = iconv("UTF-8","windows-1251", $choose_razdel);

$result21 = mysql_query("SELECT DISTINCT part,rus_trans FROM title WHERE rus_raz='$choose_razdel'");   //,   
$myrow21 = mysql_fetch_array($result21);

do 
{
	
	$rus_trans[$myrow21['part']] = preg_replace("/( \d)$/","",$myrow21['rus_trans']);
	$rus_trans = array_unique($rus_trans);
}
while ($myrow21 = mysql_fetch_array($result21));

$out[iconv("windows-1251", "UTF-8",'default')]= iconv("windows-1251", "UTF-8",'Выберите категорию');

foreach($rus_trans as $key=>$value){
	$out[iconv("windows-1251", "UTF-8",$value)]= iconv("windows-1251", "UTF-8",$key);
}

$out=json_encode($out);

return $out;
}

?>

В alert(data+' '+index);
получаю в дата текст элемента, а в index value элемента,
но элемент option не хочет создаваться.
Выше где пишу
var option = new Option("Выберите раздел","default");
элемент появляется нормально.
Бьюсь с этим уже 3 дня сделал, через load селектор $('.choose_part')
но так не работает по IE причем ни в 7 ни в 8 ни в 9.
Для этого на сервере готовил разметку уже содержащею теги Option
Код через Load
$(document).ready(function(){
	$(".sub_raz").hide();
	$("<br /><br /><select name='choose_part' id='choose_part' class='choose_part' disabled><option value='default' name='chP' selected>Выберите категорию</option></select><br /><br /><textarea name='smsText' cols='40' rows='10' class='smsText' wrap='hard' disabled></textarea><br /><br /><input name='postToemail' type='checkbox' class='postToemail' value='1' disabled/>&nbsp;<label for='postToemail'>Уведомить по e-mail о результатах проверки модератора </label><br /><br /><input name='sub_part' type='submit' value='Сохранить SMS' disabled/>").insertAfter(".choose_razdel");
	$(".choose_razdel").change(function(){
		var razdelValue = $('.choose_razdel').val();
		var part = $('.choose_part');
		if (razdelValue == 'default'){
		razdelValue='';
		part.html('<option value="default" name="chR" id="firstIL" selected>Выберите раздел</option>"').attr('disabled','disabled');
		}
		if(razdelValue.length != 0 && razdelValue != 'default') {
/*		part.load("ajax.php",{razdel: razdelValue},
		function (data, status){
		if (status == 'error') {
			$(this).html("Ошибка при загрузке");
		}
		})*/
		$.post("ajax.php",{razdel: razdelValue},
				function (data, status){
		if (status == 'error') {
			$(this).html("Ошибка при загрузке");
		}
/*part*/$('#otvet').html(data)
		})
		part.attr('disabled','');
		}
	});
});

там где за комментировано, делал через лоад потом через post.

Результат тот же под IE не работает.
Помогите разобраться.
Ответить с цитированием
  #2 (permalink)  
Старый 04.04.2011, 21:18
Профессор
Отправить личное сообщение для Telnet Посмотреть профиль Найти все сообщения от Telnet
 
Регистрация: 21.02.2011
Сообщений: 160

Разобрался Сам.
Сделал через $.post
if(razdelValue.length != 0 && razdelValue != 'default') {
		$.post("addSMS/ajax.php",{razdel: razdelValue},
				function (data, status){
		part.empty().prepend(data).attr('disabled','');
		})
		
		}

Ошибка была в файле ajax.php
header('Content-Type: text/html; charset=utf-8');
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])){
	exit('Данные отправлены не через AJAX');
}
if (isset($_REQUEST['razdel'])){	
	echo show_part();
} else {
    echo 'Данные не получены';
 }
//Формируем список таблиц
function show_part(){
$choose_razdel=$_REQUEST['razdel'];
$choose_razdel = iconv("UTF-8", "windows-1251", $choose_razdel);
$result21 = mysql_query("SELECT DISTINCT rus_trans FROM title WHERE rus_raz='$choose_razdel'");   //,   
$myrow21 = mysql_fetch_array($result21);
//$out = 'Выбрано  '.mysql_num_rows($result21).'<br />'.$choose_razdel;
[B]ОШИБКА ЗДЕСЬ[/B]
do 
{
	$rus_trans[] = preg_replace("/( \d)$/","",$myrow21['rus_trans']);
	$rus_trans = array_unique($rus_trans);
}
while ($myrow21 = mysql_fetch_array($result21));
$out = '<option value="default" name="chP" selected>Выберите категорию</option>';

foreach($rus_trans as $key=>$value){
	$out .= "<option value='$rus_trans[$key]' > $rus_trans[$key]</option>";
}
$out = iconv("windows-1251", "UTF-8", $out);
return $out;
}

Раньше когда та строка была раскоментирована, она содержала информацию о выбранном количестве строк, и переменной по которой производилась выборка из базы, и не содержала тега <option>.
Все браузеры это пропускали мимо ушей, а долбанный IE не понимал такой HTML разметки и выводил пустой список.

Вывод будьте, внимательны при формировании элементов <option>.

P.S. Через $.getJSON делать пока не буду, может потом время будет покапаюсь еще разберусь, там строки
$out = 'Выбрано  '.mysql_num_rows($result21).'<br />'.$choose_razdel;

нет в файле ajax.php, но там новые элементы списка вообще ни в одном браузере не появлялись.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические формы. ака Выпадающие списки :) sochinec Общие вопросы Javascript 5 18.04.2012 17:19
взаимосвязанные выпадающие списки xDMK Серверные языки и технологии 37 11.11.2010 16:12
RowEditor - как динамически изменять списки в комбобоксах dmitrijk ExtJS 2 08.09.2010 03:55
Выпадающие списки - динамика Страдающий AJAX и COMET 7 11.09.2009 18:25
Списки в ИЕ gaolong (X)HTML/CSS 2 12.03.2009 18:31