Код не работает в переменной

Статус
Закрыто для дальнейших ответов.

9oxyenen

Member
Регистрация
28.02.2012
Сообщения
14
пытаюсь запихнуть в переменную javascript код PHP+HTML
примерно так
Код:
  var shouts = {
    auto: "<select name='markaa' id='Country' class='auto' style='margin-right:5px'><? echo $marksel; ?></select><select name='mod' id='City' class='auto'><? $citys = mysql_query('SELECT * FROM modelauto',$sql); while($ct = mysql_fetch_array($citys)){ if($_GET[mod] == $ct[value]) { echo '<option class=\''.$ct[select].'\' value=\''.$ct[value].'\' name=\'mod\' selected>'.$ct[model].'</option>'; } else { echo '<option class=\''.$ct[select].'\' value=\''.$ct[value].'\' name=\'mod\'>'.$ct[model].'</option>'; } }?></select>",
    gruz: "Вы выбрали Ni",
    jeep: "Вы выбрали San",
    kt: "Вы выбрали Shi",
autohouse: "Вы выбрали Shi",
spec: "Вы выбрали Shi",
moto: "Вы выбрали Shi",
moped: "Вы выбрали Shi"
  };
в переменной auto код не работает хотя вне её все пашет. я думал что это из за кавычек,я js незнаю. знаю php так там есть правило что двойные кавычки в двойных нельзя и тут как раз также. но почему не работает не понимаю. помогите пожалуйста
 

tigra60

Спасатель
Регистрация
10.12.2009
Сообщения
1 990
я js незнаю. знаю php
Смело!
А это ничего, что РНР исполняется на сервере, ДО отдачи страницы в браузер, а javascript, ПОСЛЕ этого?
А кавычки здесь не при чем, тем более, что двойные кавычки внутри двойных писать можно, только нужно экранировать (\).

P.S. Хотел подсказать, как сделать, но из вашего фрагмента непонятно, что вам нужно.
 

9oxyenen

Member
Регистрация
28.02.2012
Сообщения
14
про экранизацию знаю, с php все путем он выполняется и отлично работает если не находится в переменной auto
а информация из переменной auto выводится как только совпадут условия
я специально сделал на одной странице 2 аналогичных кода, один чистый php а второй выполняется из этой переменной. так вот второй не работает. да там даже дело не в php он то генерирует из базы то что мне нужно
проблема в том что этот селект
Код:
<select name='markaa' id='Country' class='auto' style='margin-right:5px'><? echo $marksel; ?>
по идее должен менять параметры в другом селекте. и не меняет. хотя на чистом php все работает. извините если неправильно объяснил
 

tigra60

Спасатель
Регистрация
10.12.2009
Сообщения
1 990
А можно код, работающий на чистом РНР? Поэкспериментировать.
 

czp

czp
Регистрация
05.06.2011
Сообщения
635
можно так

Код:
<!DOCTYPE html>
<html>
<head>
<script>
  var tron444 = '<?php echo 'fffffff'; ?>';
</script>
<script src="ваш_скрипт.js"> </script>
ваш скрипт

Код:
alert(tron444);
 

9oxyenen

Member
Регистрация
28.02.2012
Сообщения
14
вот этот скрипт http://xhtml.ru/examples/dynamicselect/ не работает в переменной JS. уже неделю не могу найти решение. помогите пожалуйста

только у меня эти селекты генерируются из базы. но вне переменной отлично все работает
 

tigra60

Спасатель
Регистрация
10.12.2009
Сообщения
1 990
информация из переменной auto выводится как только совпадут условия
Может быть, проблема в способе вывода переменной auto, если без нее все работает.
Если есть возможность, выложите два архива с вашим кодом - работающий и неработающий.
 

9oxyenen

Member
Регистрация
28.02.2012
Сообщения
14
Спасибо что помогаете, думаю легче выложить скрипт чем архив. Вот этот код выводит этот скрипт http://xhtml.ru/exam.../dynamicselect/ но он почему то не работает

Код:
<script type="text/javascript">
  // Обявляем объект, в котором ключи - значения
  // элемента списка, а значение - фраза, которую
  // нужно отображать под списком:
  var shouts = {
	thing1: "Test 1",
	thing2: "Test 2",
	thing3: "Test 3",
	thing4: "Test 4"
  };
  // Объявляем функцию-обработчик собития смены
  // выбранного элемента списка:
  function shoutbox(select) {
	// Получаем выбранный элемент списка:
	var selected = select.options[select.selectedIndex];
	// Если значение элемента есть в ключах shouts:
	if (selected.value in shouts) {
	  // Меняем сообщение под списком:
	  document.getElementById("box").innerHTML = shouts[selected.value];
	} else {
	  // Иначе просто очищаем блок для сообщения:
	  document.getElementById("box").innerHTML = "";
	}
  }
</script>
<!-- На список прописываем обработчик события change,
	 в который передаем параметром ссылку на этот список. -->
<select name="some" onchange="shoutbox(this)">
  <option value="thing1">Ich</option>
  <option value="thing2">Ni</option>
  <option value="thing3">San</option>
  <option value="thing4">Shi</option>
</select>
<!-- Блок для сообщений -->
<div id="box"></div>
 

tigra60

Спасатель
Регистрация
10.12.2009
Сообщения
1 990
Ну, то что вы привели, оба работают: и по ссылке в в коде.

Рискну предположить, что вы в объект shouts вашего кода в значение свойства (вместо "Тест1")вставляете HTML код селектора, а он у вас не работает?
Если да, то innerHTML тут не прокатит. Нужно создавать узлы DOM. Посмотрю, как это можно попроще сделать и поделюсь результатом.
 

9oxyenen

Member
Регистрация
28.02.2012
Сообщения
14
Спасибо, я честно говоря ничего не понял. Вы специально для меня будете код писать??
 

tigra60

Спасатель
Регистрация
10.12.2009
Сообщения
1 990
Пока что я пытаюсь понять, что именно у вас не работает.
В своем предыдущем посте я угадал или нет?
 

9oxyenen

Member
Регистрация
28.02.2012
Сообщения
14
Да, если вместо Test 1 поставить этот скрипт http://xhtml.ru/examples/dynamicselect/ то этот скрипт перестает работать. Может у вас есть какие то аналогичные первому скрипту варианты? Я просто javascript вообще не знаю, может это как то по другому называется? Пробовал искать по запросу "динамический select" но там не много не то находит
 

tigra60

Спасатель
Регистрация
10.12.2009
Сообщения
1 990
Честно говоря, этот способ мне кажется несколько проктальным. Не лучше ли подгружать нужный селектор с помощью Аякса?
По-моему, это будет единственное разумное решение.
 

9oxyenen

Member
Регистрация
28.02.2012
Сообщения
14
Каким образом? Дайте пример пожалуста если не сложно
 

9oxyenen

Member
Регистрация
28.02.2012
Сообщения
14
помогите кто нибудь..очень надо
 

czp

czp
Регистрация
05.06.2011
Сообщения
635
я допустим вообше нефига не понял что нужно сделать, думаю и остальные тоже
а что нельзя взятьс того сайта код? и переделать

так?

Код:
<?php $var = "<select name='markaa' id='Country' class='auto'><option>awwwaaa</option></select><select name='mod' id='City' class='auto'><option>ddddd</option></select>" ?>
<script type="text/javascript">
// Обявляем объект, в котором ключи - значения
// элемента списка, а значение - фраза, которую
// нужно отображать под списком:
var shouts = {
auto: "<?php echo $var ?>",
gruz: "Вы выбрали Ni",
jeep: "Вы выбрали San",
kt: "Вы выбрали Shi",
autohouse: "Вы выбрали Shi",
spec: "Вы выбрали Shi",
moto: "Вы выбрали Shi",
moped: "Вы выбрали Shi"
};
// Объявляем функцию-обработчик собития смены
// выбранного элемента списка:
function shoutbox(select) {
// Получаем выбранный элемент списка:
var selected = select.options[select.selectedIndex];
// Если значение элемента есть в ключах shouts:
if (selected.value in shouts) {
// Меняем сообщение под списком:
document.getElementById("box").innerHTML = shouts[selected.value];
} else {
// Иначе просто очищаем блок для сообщения:
document.getElementById("box").innerHTML = "";
}
}
</script>
<!-- На список прописываем обработчик события change,
в который передаем параметром ссылку на этот список. -->
<select name="some" onchange="shoutbox(this)">
<option value="auto">Ich</option>
<option value="gruz">Ni</option>
<option value="jeep">San</option>
<option value="kt">Shi</option>
</select>
<!-- Блок для сообщений -->
<div id="box"></div>
если я правильно понял
 

tigra60

Спасатель
Регистрация
10.12.2009
Сообщения
1 990
У нас тут все превратилось в разговор слепого с глухим. У меня такие вот предположения. Если вам по какой-то причине нужно динамическое добавление селекторов поместить в переменную - объект, то объявлять нужно не как свойство, а как метод объекта.
Например, у вас так:
Код:
var shouts = {
    auto: "<select name='markaa' id='Country' class='auto' style='margin-right:5px'><? echo $marksel; ?></select><select name='mod' id='City' class='auto'><? $citys = mysql_query('SELECT * FROM modelauto',$sql); while($ct = mysql_fetch_array($citys)){ if($_GET[mod] == $ct[value]) { echo '<option class=\''.$ct[select].'\' value=\''.$ct[value].'\' name=\'mod\' selected>'.$ct[model].'</option>'; } else { echo '<option class=\''.$ct[select].'\' value=\''.$ct[value].'\' name=\'mod\'>'.$ct[model].'</option>'; } }?></select>",
    gruz: "Вы выбрали Ni",
// и так далее
 };
  };
А нужно было бы так:
Код:
var shouts = {
    auto: function () {
            // здесь код функции, которая добавляет селектор в DOM
        }),
    gruz: "Вы выбрали Ni",
// и так далее
 };
Простое добавление кода селекторов, без включения в DOM не приведет к нужному результату.

Лучше всего будет, если вы схематически объясните, какой именно функционал вам нужен (на простых картиночках). Я, например, совсем не понимаю, для чего вам нужно добавление селекторов запихивать в объект? Из-за этого непонимания не могу вам ничего подсказать.
Мне кажется, это ключевой момент. Потому что подскажу я вам, допустим, как с помощью Аякс делать динамическое добавление селекторов (книжка "Аякс в действии" глава 9). А вы его опять в переменную в качестве свойства поместите, и ничего работать не будет.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ