Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   selector. Выбор элементов массива. (https://javascript.ru/forum/events/73049-selector-vybor-ehlementov-massiva.html)

nGreg 17.03.2018 10:24

selector. Выбор элементов массива.
 
Господа! Помогите начинающему.
Есть разобранный массив:
<? foreach ($summ as $itm): ?>
...
<div id="blabla" class=
<?if ($itm['transpStatus']==0):?> "styled-select-no"><?endif;?>
<?if ($itm['transpStatus']==1):?> "styled-select-yes"><?endif;?>
...
<?endforeach;?>

.. и сам скрипт:
<script>
$(document).ready(function () {
$('.select-id').change(function () {
$.post("/index.php?component=org&section=ajax", {event: "payForDelivery", id_zp:<?=$_GET['value']?>, rel: rel},
function(payForDeliveryResult){
$("#blabla").removeClass("styled-select-no");
});
})
})
</script>

Я ожидаю удаление классов во всех элементах, а удаляется только в первой итерации! Что я сделал не так? На соседней странице по такому же сценарию всё работает...

рони 17.03.2018 10:52

Цитата:

Сообщение от nGreg
Я ожидаю удаление классов во всех элементах,

Цитата:

Сообщение от nGreg
$("#blabla")

это 1 элемент, так как id уникально.

j0hnik 17.03.2018 10:54

Обращаться по классу а не по ID

рони 17.03.2018 10:56

nGreg,
для однотипных элементов используют класс в нормальном случае, или костыль [селектор по атрибуту] если очень хочется с id

j0hnik 17.03.2018 11:01

$(".styled-select-no").removeClass("styled-select-no");


прямо таки выстрел в самого себя!

nGreg 17.03.2018 11:12

Цитата:

Сообщение от j0hnik (Сообщение 480741)
$(".styled-select-no").removeClass("styled-select-no");


прямо таки выстрел в самого себя!

Так то конечно работает! Уже проверял.

Однако дальше должно быть вот так:
$("#blabla" + rel).removeClass("styled-select-no");

а rel - это уникальный номер! Но эта конструкция нифига не делает. Повторюсь, так работает на странице рядом...

nGreg 17.03.2018 11:35

Так что, самоубиться не получится:no: . Мне нужно убить класс в конкретной итерации. В догонку хочу сказать, что хоть и не программист не разу, но пользуюсь отладчиками и в PHP, и в JS. Они ошибок не выдают и все необходимые данные есть. С JS синтаксисом у меня проблемы...

j0hnik 17.03.2018 11:45

$('[id="blabla'+rel+']').removeClass("styled-select-no");

рони 17.03.2018 11:46

j0hnik,
:-?

j0hnik 17.03.2018 11:47

рони,:yes:

nGreg 17.03.2018 11:50

Цитата:

Сообщение от j0hnik (Сообщение 480751)
$('[id="blabla'+rel+']').removeClass("styled-select-no");

А консоль мне в ответ:
Uncaught SyntaxError: missing ) after argument list

j0hnik 17.03.2018 11:53

$('[id="blabla'+rel+'"]').removeClass("styled-select-no");


скобку забыл

рони 17.03.2018 11:56

Цитата:

Сообщение от nGreg
$('[id="blabla'+rel+'"]').

кавычка двойная пропущена, но откуда возмётся rel и причём тут rel, для меня загадка.

nGreg 17.03.2018 12:01

Ничего не понимаю! Ошибок нет и ничего не происходит...

nGreg 17.03.2018 12:05

Цитата:

Сообщение от рони (Сообщение 480756)
кавычка двойная пропущена, но откуда возмётся rel и причём тут rel, для меня загадка.

"rel" есть! Это уникальный, неповторяющийся номер из базы данных. Дабы не париться, я их прямо на экран и вывел. Они используются как дополнение к id-шке...

j0hnik 17.03.2018 12:06

console.log(rel);
поставьте рядом и посмотрите что там

nGreg 17.03.2018 12:10

Так ведь уже попробовал....
Теперь попробую в двух словах объяснить, чего мне нужно:
Есть выведенный массив на экран. У каждой итерации есть уникальный номер. Мне нужно, чтобы при нажатии на кнопку (которая есть в каждой строчке) производилась очистка класса в конкретной строке. По этому самому номеру...

nGreg 17.03.2018 12:13

а уникальный номер и выводит... То же, что я вижу в дебаггере...

рони 17.03.2018 12:16

nGreg,
а нельзя этот rel в html добавить?

nGreg 17.03.2018 12:21

Вот тут я вас не совсем понял. Этот rel берётся из конструкции
php foreach ... В каждой строке они разные. И в отладчике js в хроме я вижу эти номера. Те, к которым я обращаюсь... Те же, что мне показывает отладчик php storm-a...

Nexus 17.03.2018 12:27

Попробуйте выполнить такой код и посмотрите, что будет вы ведено в консоль браузера.
$('[id="blabla'+rel+'"]').removeClass("styled-select-no");
console.log(
    rel,
    $('[id="blabla'+rel+'"]').get(0)
);

nGreg 17.03.2018 12:36

7801 undefined!
7801 - номер записи в БД (тот самый rel) Именно тот, на который я тыкнул. Мне именно и нужно, чтобы было defined...

nGreg 17.03.2018 15:45

А вот если так написать:
console.log($('[id="blabla'+rel+'"]'))
то получается:
init [prevObject: init(1), context: document, selector: "[id="blabla7108"]"]

j0hnik 17.03.2018 16:20

nGreg,
у вас один rel для всех #blabla ???

j0hnik 17.03.2018 16:24

Когда появляется этот rel? по событию какому то?

nGreg 17.03.2018 16:29

Цитата:

Сообщение от j0hnik (Сообщение 480779)
nGreg,
у вас один rel для всех #blabla ???

Все разные. Это ID-шки записей из MySQL базы данных, переданные сюда ajax-ом. Они по определению не могут быть одинаковыми

j0hnik 17.03.2018 16:32

вот в колбеке и вешайте обработчик ваш. заранее этого делать нельзя

nGreg 17.03.2018 16:33

Цитата:

Сообщение от j0hnik (Сообщение 480780)
Когда появляется этот rel? по событию какому то?

Верно. В каждой строчке висит "select". Кнопки подкрашены разными цветами в зависимости от состояния этого селекта. При изменении селекта класс сначала должен очиститься, затем я добавлю addClass.. Но, пока что не удаётся даже очистить стиль...

рони 17.03.2018 16:35

nGreg,
измените id !!! сделайте id="blabla7108" в html, незнаю как это на php
<div id="blabla"+rel class=
<?if ($itm['transpStatus']==0):?> "styled-select-no"><?endif;?>
<?if ($itm['transpStatus']==1):?> "styled-select-yes"><?endif;?>

nGreg 17.03.2018 16:38

Цитата:

Сообщение от рони (Сообщение 480785)
nGreg,
измените id !!! сделайте id="blabla7108"

Это как???? 7801 - это результат foreach-а!!!!!
В другой стоке естественно другая цифра...

nGreg 17.03.2018 16:41

Я почему спрашиваю именно на форуме JS? Именно такая конструкция работает на другой странице у меня на сайте.. А тут я чего-то не так идёт... С php всё в полном порядке...

Nexus 17.03.2018 17:06

Цитата:

Сообщение от nGreg
7801 undefined!

у вас на странице на момент выполнения функции нет элемента с id "blabla7801".

nGreg 17.03.2018 17:41

https://yadi.sk/i/21SBeXdF3TUUWF
Только в теперь не "rel", а "rowNum". Ну и цифры другие, потому что с другой страницы взяты...

j0hnik 17.03.2018 18:14

https://jquery-docs.ru/jQuery.ajax/ про колбеки почитайте.

вам нужно ваш обработчик события change добавлять колбеком.
потому что до выполнения аякс запроса, в атрибут id еще не приписан ваш rel.


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