#php #javascript
#php #javascript
Вопрос:
Я не разработчик, но я некоторое время баловался этим. Надеюсь, вы сможете помочь
У меня есть несколько div с ID:s, которые динамически присваиваются им через php. У меня есть функция, которая вызывается через флажок, который скрывает и показывает divs. Что я хочу сделать сейчас, так это получить идентификаторы div из документа и поместить их в функцию.
Я вроде как скопировал коды с разных форумов, и это работает, если я жестко кодирую имена div. Не уверен, что я делаю сейчас, хотя буду признателен за любую помощь.
Вот что у меня есть
Присваивает идентификаторы разделам:
$a .= "<div id='$go[media_caption]" . $i . "'>";
Функция:
var editorial = [id^='editorial']);
function visiblox(arrDiv, hs) {
var disp = (hs) ? 'none' : 'block';
for(var x = 0; x < arrDiv.length; x ) {
document.getElementById(arrDiv[x]).style.display = disp;
}
}
function chk(what, item) {
if(item) {
visiblox(what, false);
} else {
visiblox(what, true);
}
}
Вызывает функцию:
<input type='checkbox' onclick='chk(editorial, this.checked);' checked> Editorial</p>
Комментарии:
1. Проблема в том, что всем вашим разделам присваивается один и тот же идентификатор?
2. Строка
var editorial = [id^='editorial']);
полна синтаксических ошибок. Что вы хотите, чтобыeditorial
переменная содержала?3. Я могу себе представить, что это такое. В принципе, я хочу, чтобы он содержал все разделы, которые начинаются с ‘editorial’. Я хочу, чтобы все они скрывались / показывались, когда я нажимаю на флажок. Спасибо
4. Скорее, я хочу, чтобы он содержал все идентификаторы div, которые начинаются с editorial .. в виде списка, разделенного запятыми и пробелом.
Ответ №1:
Можете ли вы заставить ваш PHP выводить массив для использования вашим Javascript? Поскольку PHP выводит идентификаторы, он также добавит их в строку, которая находится в синтаксисе массива Javascript. Что-то вроде этого:
$a .= "<div id='$go[media_caption]" . $i . "'>";
$jsIDs .= "'$go[media_caption]',";
Затем в конце файла, непосредственно перед тем, как PHP-файл закроет теги </body>
и </html>
, выведите массив в виде скрипта:
$jsIDs = substr($jsIDs, 0, strlen($jdIDs)-1); // strip off the last comma
$jsIDs = "<script type='text/javascript'>var idArr = [" . $jsIDs . "];</script>";
echo($jsIDs);
Тогда внутри javascript вам не нужно искать идентификаторы в DOM. Вы можете просто использовать массив (в моем примере я назвал его idArr
).
ОБНОВЛЕНИЕ: Мартин говорит, что идентификаторы, выводимые PHP, иногда начинаются с «editorial», некоторые начинаются с чего-то другого. Чтобы собрать только те, которые начинаются с «editorial», измените строку выше, которая начинается с $jsIDs .=
, на эти две строки:
if ( substr($go[media_caption], 9) == "editorial" )
$jsIDs .= "'$go[media_caption]',";
Это должно сработать.
Комментарии:
1. Я пытаюсь разобраться в этом. divs создаются и присваиваются идентификаторы внутри foreach ($ pages как $ go) в php. Таким образом, каждый DIV получает имя из записи в базе данных, плюс номер (amp; i). Правильно ли это выглядит? foreach ($pages как $go) { $a .= «<идентификатор div=’$go[media_caption]» . $i . «‘>»; $jsIDs .= «‘$go[media_caption]’, «; }
2. Когда они будут созданы, могут ли они также быть добавлены в список, который затем будет вызван в javascript?
3. Основная идея заключается в том, что в дополнение к генерации HTML с помощью PHP вы также генерируете небольшое количество Javascript. В частности, вы используете PHP для построения строки, содержащей массив Javascript. Созданный вами массив Javascript содержит идентификаторы DIVS, сгенерированные PHP.
4. Итак, после строки PHP, которая добавляется к
$a
, также добавьте к$jsIDs
. Вы хотите, чтобы$jsIDs
строка выглядела следующим образом:'id1','id2','id3',
и т.д. Наконец, в конце вы удаляете конечную запятую и помещаете вокруг строки допустимый код Javascript, так что в конечном итоге она выглядит следующим образом:<script type='text/javascript'>var idArr=['id1','id2','id3'];</script>
. Это допустимая строка Javascript, созданная PHP и сохраненная в PHP string. Вы можете вывести это с помощью инструкции PHPecho
, чтобы включить его как часть HTML-документа, который создает PHP.5. Я думаю, что я понял это! Спасибо. Нет, есть только одна вещь, о которой я забыл упомянуть; Существуют разные наборы divs. Некоторые из них называются редакционными, некоторые называются как-то иначе. У меня будет один соответствующий флажок для каждого. Есть ли способ отделить их друг от друга; т. е. $ jsIDs будет содержать только строки, начинающиеся с editorial?