Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Выбор элемента (https://javascript.ru/forum/dom-window/72777-vybor-ehlementa.html)

SIGTTD 25.02.2018 16:15

Выбор элемента
 
Подскажите, пожалуйста, как выбрать элементы, которые отрисовываются в цикле php? Ни по id, ни по class не получается
Код php:
for($i = 300; $i >= 0; $i--) {
  $resultDB = mysql_query("SELECT * FROM ".$userName." WHERE id = $i") or die(mysql_error());
  $dab = mysql_fetch_assoc($resultDB);
  if (($dab["id"] != 0) && ($dab["class"] == $postClass)) {
    echo "<div><form id='editForm' method='post' action='edit.php'>
      <p class='postContentClass' id='postContent'>".htmlspecialchars($dab["content"])."</p>
      <textarea class='editedPostClass' id='editedPost' name='editedPost".$dab['id']."'>".htmlspecialchars($dab["content"])."</textarea>
      <input type='submit' name='editPost".$dab['id']."' value='Изменить'>
    </form>
    </div>";}}

Нужно по клику мыши на #postContent убрать его и сделать видимым #edited Post

laimas 25.02.2018 16:24

А готовый html как результат работы РНР нельзя показать или религия не позволяет?

SIGTTD 25.02.2018 16:34

Вложений: 1
Вы имеете в виду веб-страницу? Она на локальном сервере, могу только картинку приложитьhttps://javascript.ru/forum/attachme...d=151956562 6

Белый шум 25.02.2018 16:38

Цитата:

Сообщение от SIGTTD (Сообщение 479115)
Нужно выбрать #postContent, убрать его, сделать видимым #edited Post

for($i = 300; $i >= 0; $i--) {
  $resultDB = mysql_query("SELECT * FROM ".$userName." WHERE id = $i") or die(mysql_error());
  $dab = mysql_fetch_assoc($resultDB);
  if (($dab["id"] != 0) && ($dab["class"] == $postClass)) {
    echo "<div id='i" . $i . "'><form class='editForm' method='post' action='edit.php'>
      <p class='postContentClass postContent'>".htmlspecialchars($dab["content"])."</p>
      <textarea class='editedPostClass editedPost' name='editedPost".$dab['id']."'>".htmlspecialchars($dab["content"])."</textarea>
      <input type='submit' name='editPost".$dab['id']."' value='Изменить'>
    </form>
    </div>";}}


id должен быть уникальным в пределах страницы.

SIGTTD 25.02.2018 16:41

Понимаю, но CSS почему-то классу такого элемента не задает стиль... только id. Думал, что JS так же себя поведет

laimas 26.02.2018 01:03

Цитата:

Сообщение от SIGTTD
Вы имеете в виду веб-страницу? Она на локальном сервере, могу только картинку

:) Если картинку можно, то почему html нет? Открываем отладчик браузера, выбираем участок html-кода в нем, копируем и выставляем здесь.

А вот увлекаться id таким образом <div id='i" . $i . "'> не стоит, это бессмыслица, а вот тут name='editedPost".$dab['id']."' польза. Только используйте кавычки наоборот.

for($i = 300; $i >= 0; $i--)
$resultDB = mysql_query("SELECT * FROM ".$userName." WHERE id = $i") or die(mysql_error());

Это что такое?

SIGTTD 26.02.2018 15:50

Это невероятно,я с ошибкой написал имя метода :cray: , теперь работает
Сама функция
function editClicked() {
	var postView = document.getElementById('postContent');
	postView.addEventListener('click', function() {
		var postArea = document.getElementById('editedPost');
		postView.style.visibility = 'hidden';
		postView.style.zIndex = '0';
		postArea.style.display = 'block';
		postArea.style.zIndex = '50';
	});
}

Но все же непонятно, почему с одинаковыми id получается, вот три элемента:
<div>id: 63; content: <br><form id='editForm' method='post' action='edit.php'>
	<p class='postContentClass' id='postContent'>АК</p>
	<textarea class='editedPostClass' id='editedPost' name='editedPost63'>АК</textarea>
	<div>
		<input type='submit' name='editPost63' value='Изменить'>
		<input id='deletePost' type='submit' name='deletePost63' value='Удалить'>
		<span class='postMeta'>23, January, 1:5</span>
	</div>
</form></div>
<div>id: 62; content: <br><form id='editForm' method='post' action='edit.php'>
	<p class='postContentClass' id='postContent'>Shick!</p>
	<textarea class='editedPostClass' id='editedPost' name='editedPost62'>Shick!</textarea>
	<div>
		<input type='submit' name='editPost62' value='Изменить'>
		<input id='deletePost' type='submit' name='deletePost62' value='Удалить'>
		<span class='postMeta'>22, January, 21:21</span>
	</div>
</form></div>
<div>id: 57; content: <br><form id='editForm' method='post' action='edit.php'>
	<p class='postContentClass' id='postContent'>I wanna know more</p>
	<textarea class='editedPostClass' id='editedPost' name='editedPost57'>I wanna know more</textarea>
	<div>
		<input type='submit' name='editPost57' value='Изменить'>
		<input id='deletePost' type='submit' name='deletePost57' value='Удалить'>
		<span class='postMeta'>22, January, 21:13</span>
	</div>
</form></div>

Цитата:

Сообщение от laimas
for($i = 300; $i >= 0; $i--)
$resultDB = mysql_query("SELECT * FROM ".$userName." WHERE id = $i") or die(mysql_error());

А в цикле просто записи выцепляются по очереди, криво сделано?

laimas 26.02.2018 16:01

Цитата:

Сообщение от SIGTTD
А в цикле просто записи выцепляются по очереди, криво сделано?

И криво, и просто ужасно. Во-первых $i >= 0 просто не может быть, если id, это уникальные значения формируемые автоматически полем с автоинкрементом - никогда не будет сформирован ID со значением 0.

Во-вторых это полнейшая глупость, ибо записи могут удаляться, а будучи уникальным значением они повторно не будут использованы, то есть запрос id=45 может ничего и не вернуть.

В третьих, это насилование базы, а не выборка из нее. Если необходимо получить 300 записей, значит:

mysql_query("SELECT * FROM ".$userName." ORDER BY id LIMIT 300")

и уже результат выборки в цикле и помещать в нужное.

И or die(mysql_error()); - это тоже плохо. Ошибки нужно выводить по условию - режим отладки? вывод, иначе что-то, но не mysql_error().

<form id='editForm' - такого быть не должно, вам уже говорилось, что id должно быть уникальным. Да и не нужно столько форм, форма должна быть одна.

SIGTTD 26.02.2018 16:11

Спасибо за дельные советы, буду исправлять :)
А id у формы только по той причине, что CSS по классу не хотел задавать ей стиль, лучше не придумал

laimas 26.02.2018 16:30

Цитата:

Сообщение от SIGTTD
А id у формы только по той причине, что CSS по классу не хотел задавать ей стиль, лучше не придумал

Не надо выдумывать, стиль можно и по ID определить, и по классу.

Вы вообще лишнего написали - все это нужно делать одной формой, все id что есть выбросить (и не только у форм), они вообще не нужны. Поля единственной формы именовать так:

<textarea class="editedPostClass" name="edit[<?=$dab['id']?>"><?=htmlspecialchars($dab['content'])?></textarea>
<input type="checkbox" name="del[]" value="<?=$dab['id']?>">
.....
<textarea class="editedPostClass" name="edit[<?=$dab['id']?>"><?=htmlspecialchars($dab['content'])?></textarea>
<input type="checkbox" name="del[]" value="<?=$dab['id']?>">


с выводом html, или ' ... name="edit['.$dab['id'].'>" если echo.

Те, что надо удалить отмечать флажком. Сервер под ключом del получит id записей для удаления, которые нужно вычесть из id редактируемых (ключ edit), если после этого массив edit будет не пуст, то обновить записи id которых он содержит. Записи del удалить одним запросом.

Удаление/редактирование по одному может быть удобным только в случае асинхронного обмена.


Часовой пояс GMT +3, время: 03:11.