Форум русской поддержки Joomla!® CMS
03.12.2016, 21:46:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Как HTML поместить внутрь js?

 (Прочитано 473 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SimonovSergey
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 51


« : 13.11.2014, 20:19:00 »

Я не разобрался и поэтому пришлось сделать следующее:
Код:
<?php
$db = JFactory::getDBO();
$query = 'SELECT * FROM #__calculator_ WHERE Works = "4" ';
$db->setQuery($query);
$data_array = $db->loadObjectList();
$obliz = array() ;
?>
<select name = "cspisok">
<option>Выберите из списка</option>
<script>
var cform1 = document.forms.ccalculator; var SpisokStrana1 = cform1.elements.stranaspisok;
"<?php foreach($data_array as $tovar):?>"

if (SpisokStrana1.value == "<?php echo $tovar->proizvoditel; ?>") {
"<?php $obliz[]= $tovar->name; ?>"
alert("<?php echo $tovar->name; ?>");
}
"<?php endforeach;?>"

</script>
                <?php print_r($obliz);?>
<?php foreach($obliz as $tovar):?>
<option><?php echo $tovar; ?></option>
<?php endforeach;?>
</select>
но почему alert выскакивает один раз, как положено, а в массив заносятся все значения (три)? можно поместить HTML в js?
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #1 : 13.11.2014, 20:33:59 »

А теперь нажмите ctrl-u и посмотрите что вы там напортачили..

Вопрос на мой взгляд некорректен. Javascript сам по себе не является документом чтобы туда еще чего-то можно было помещать..
« Последнее редактирование: 13.11.2014, 20:44:20 от zomby6888 » Записан
SimonovSergey
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 51


« Ответ #2 : 13.11.2014, 20:44:41 »

А теперь нажмите ctrl-u и посмотрите что вы там напортачили..
array - пишет три значения
alert - выскакивает один раз, почему они же в одном цикле?
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #3 : 13.11.2014, 20:48:34 »

если вы внимательно изучите исходный код страницы то вы поймете почему ибо там будет что-то вроде того:
Код
if (SpisokStrana1.value == 'значение1') {
  alert("...");
}
if (SpisokStrana1.value == 'значение2') {
  alert("...");
}
if (SpisokStrana1.value == 'значение3') {
  alert("...");
}
 
Записан
SimonovSergey
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 51


« Ответ #4 : 13.11.2014, 21:28:23 »

с alert мне все понятно, стоит if отсекает ненужные значения. Мне не понятно почему if не отсекает ненужные значения и все они записываются в массив... помогите разобраться...
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #5 : 13.11.2014, 22:03:00 »

потому что это условие выполняется в javascript-е а в массив вы записываете через php! Первый исполняется в браузере пользователя, второй на стороне сервера и никак они эти два кода между собой не связаны..

php код формирует HTML с javscript кодом который будет исполнен в браузере пользователя так понятнее?  Вам бы теорию почитать прежде чем кодить..
« Последнее редактирование: 13.11.2014, 22:10:58 от zomby6888 » Записан
SimonovSergey
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 51


« Ответ #6 : 13.11.2014, 22:10:52 »

потому что это условие выполняется в javascript-е а в массив вы записываете через php! Первый исполняется в браузере пользователя, второй на стороне сервера и никак они эти два кода между собой не связаны..
и что же делать?
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #7 : 13.11.2014, 22:13:50 »

и что же делать?

А вы не написали что вы хотите сделать.. судя по вашему коду тройной alert. тогда можете написать так:
Код
alert('гип-гип-ура!');
alert('гип-гип-ура!');
alert('гип-гип-ура!');
 
Записан
SimonovSergey
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 51


« Ответ #8 : 13.11.2014, 22:35:31 »

есть два выпадающих списка которые формируются из БД, если в первом списке меняется значение, то во втором получаем список только из тех элементов  в которых присутствует выбранное значение из первого списка.
Как я планировал:
Сформировать первый список при помощи php
Далее onchange определяю когда меняется первый список, получаю его значение
И далее зная это значение отсеиваю второй список
Код:
<form name="ccalculator">
<?php
$db = JFactory::getDBO();
$query = 'SELECT * FROM #__calculator_ WHERE Works = "4" ';
$db->setQuery($query);
$data_array = $db->loadObjectList();
$aux_res = array() ;
                $result_res = array() ;
                foreach($data_array as $tovar) {
                        $aux_res[] = $tovar->proizvoditel ;                     
                }
                $aux_res = array_unique($aux_res) ;
                print_r($aux_res);
?>
<select name = "stranaspisok">
<option>Выберите из списка</option>
<?php foreach($aux_res as $tovar):?>
<option><?php echo $tovar; ?></option>
<?php endforeach;?>
</select>

<?php
$db = JFactory::getDBO();
$query = 'SELECT * FROM #__calculator_ WHERE Works = "4" ';
$db->setQuery($query);
$data_array = $db->loadObjectList();
$obliz = array() ;
?>
<select name = "cspisok">
<option>Выберите из списка</option>
<script>
var cform1 = document.forms.ccalculator; var SpisokStrana1 = cform1.elements.stranaspisok;
SpisokStrana1.onchange = strana1;
function strana1(){
"<?php foreach($data_array as $tovar):?>"

if (SpisokStrana1.value == "<?php echo $tovar->proizvoditel; ?>") {
"<?php $obliz[]= $tovar->name; ?>"
alert("<?php echo $tovar->name; ?>");

}
"<?php endforeach;?>"
}
</script>
                <?php print_r($obliz);?>
<?php foreach($obliz as $tovar):?>
<option><?php echo $tovar; ?></option>
<?php endforeach;?>
</select>
но второй список не получается просеивать...
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #9 : 13.11.2014, 22:48:23 »

Зачем у вас два раз один и тот-же запрос выполняется? Динамические списки обычно делаются с использованием AJAX
Записан
SimonovSergey
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 51


« Ответ #10 : 13.11.2014, 23:20:28 »

Зачем у вас два раз один и тот-же запрос выполняется? Динамические списки обычно делаются с использованием AJAX

Знаю, думал может по проще можно...(((
Записан
SimonovSergey
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 51


« Ответ #11 : 14.11.2014, 00:49:51 »

Вот как сделал используя только js и php, обошелся без AJAX, напишу подробнее, может кому пригодится:
Код:
<?php
//Делаем запрос к базе данных, выбираем все поля таблицы __calculator_ у которых значение Works равно 4
$db = JFactory::getDBO();
$query = 'SELECT * FROM #__calculator_ WHERE Works = "4" ';
$db->setQuery($query);
$data_array = $db->loadObjectList();
//Создаем дополнительные массивы, они понадобятся чтобы убрать повторения
$aux_res = array() ;
                $result_res = array() ;
            //Записываем в дополнительный массив элементы первого списка
                foreach($data_array as $tovar) {
                        $aux_res[] = $tovar->proizvoditel ;                     
                }
            //Удаляем повторы
                $aux_res = array_unique($aux_res) ;
               
?>
<!--Создаем первый список-->
<select name = "stranaspisok">
<option>Выберите из списка</option>
<!--Записываем наш массив в выпадающий список, первый список готов-->
<?php foreach($aux_res as $tovar):?>
<option><?php echo $tovar; ?></option>
<?php endforeach;?>
</select>
Код:
<!--Делаем запрос к базе данных, выбираем все поля таблицы __calculator_ у которых значение Works равно 4 -->
<?php
$query = 'SELECT * FROM #__calculator_ WHERE Works = "4" ';
$db->setQuery($query);
$data_array = $db->loadObjectList();
?>
<!--Создаем второй список-->
<select name = "cspisok">
<option>Выберите из списка</option>
</select>
Код:
<!--Скрипт для динамического изменения второго списка-->
<script>
//Создаем переменные, SpisokStrana в ней содержится элемент первого списка, cSpisok в ней содержится элемент второго списка
var cform = document.forms.ccalculator; var SpisokStrana = cform.elements.stranaspisok;
var cSpisok = cform.elements.cspisok;
//Если первый список изменяется, то запуская функцию strana
SpisokStrana.onchange = strana;

function strana(){
//Позиционируем второй список на пункте Выберите из списка
cSpisok.value = "Выберите из списка";
//Очищаем от всех элементов наш список, так как значение первого списка поменялось и нам необходимо получить новые значения во втором списке
while (cSpisok.options.length) {
    cSpisok.options[0] = null;
    }
    //Создаем первый элемент списка Выберите из списка
    var item = document.createElement("OPTION");
            item.value = '1';
            item.text = 'Выберите из списка';
            cSpisok.options.add(item);
        //При помощи цикла заполняем список нужными нам элементами из БД
"<?php foreach($data_array as $tovar):?>"
if (SpisokStrana.value == "<?php echo $tovar->proizvoditel; ?>") {
var item = document.createElement("OPTION");
item.value = '1';
            item.text = '<?php echo $tovar->name; ?>';
            cSpisok.options.add(item);
}
"<?php endforeach;?>"
}

</script>
Записан
Joker_V
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 13


« Ответ #12 : 02.07.2015, 23:47:15 »

Я бы с помощью AJAX делал бы. Динамическое обновление эфективнее. Зачем так много информации грузить в HTML? Чем больше загрузите тем медленее страница. Обробатуем по js onChange. Создаем функцию что делает AJAX запрос на сервер по выбранному элементу со списка. Получаем ответ в json, обновляем данные в новом списке по полученным данным. Да в принципе и все. На сервере нужно лишь сделать запрос к бд и получить информацию и распечатать (echo) переменную encodejson после чего прервать выполнение exit.
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Offline Offline

Пол: Мужской
Сообщений: 1538


« Ответ #13 : 03.07.2015, 00:41:23 »

Это если списки большие, если там по 3-4 строчки то можно и без AJAX. И не обязательно в HTML грузить. Можно в js объекте хранить. Но в большинстве случаев так и надо делать (через AJAX всмысле)
« Последнее редактирование: 03.07.2015, 00:45:47 от zomby6888 » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet