powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Синхронизация двух выпадашек.
16 сообщений из 16, страница 1 из 1
Синхронизация двух выпадашек.
    #39604660
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, коллеги!

Нужна ваша помощь.
В общем есть две выпадашки, они в общем то разные, один КОНТРАКТЫ, другой ВИД ДЕЯТЕЛЬНОСТИ.
Но у них некоторые значения одинаковые 'Больничный', 'Командировка', 'Отпуск', 'Отпуск без содержания', 'Социальный отпуск'.
И в случае выбора одного из этих значений в одной выпадашке, нужно то же самое выбрать в другом.
Вот пример моего решения.
В общем виде работает нормально, но после того, как я протыкаю содержимое скажем раз 10, код начинает работать не корректно.
Например при выборе 'Больничный' иногда реагирует не так как ожидаю
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
var contractChange = 1;
var employmentChange = 1;
$(function () {
    $(document).on("click", "#ContractID", function (e) {
        var contractValue = $("#ContractID option:selected").text().trim();
        if (contractChange == 1 && (
            contractValue == 'Больничный' ||
            contractValue == 'Командировка' ||
            contractValue == 'Отпуск' ||
            contractValue == 'Отпуск без содержания' ||
            contractValue == 'Социальный отпуск'))
        {
            employmentChange = 0;

            $('select[name="EmploymentID"] option').each(function () {
                if ($(this).attr('selected') == 'selected') {
                    $(this).attr('selected', null);
                }
            })

            $('select[name="EmploymentID"] option').each(function () {
                if ($(this).text().trim() == contractValue) {
                    $(this).attr('selected', 'selected');
                }
            })

            employmentChange = 1;
        }
    })
})

$(function () {
    $(document).on("click", "#EmploymentID", function (e) {
        var employmentValue = $("#EmploymentID option:selected").text().trim();
        if (employmentChange == 1 && (
            employmentValue == 'Больничный' ||
            employmentValue == 'Командировка' ||
            employmentValue == 'Отпуск' ||
            employmentValue == 'Отпуск без содержания' ||
            employmentValue == 'Социальный отпуск')) {

            contractChange == 0;

            $('select[name="ContractID"] option').each(function () {
                if ($(this).attr('selected') == 'selected') {
                    $(this).attr('selected', null);
                }
            })

            $('select[name="ContractID"] option').each(function () {
                if ($(this).text().trim() == employmentValue) {
                    $(this).attr('selected', 'selected');
                }
            })

            contractChange = 1;
        }
    })
})


Уже дошел до таких извращений, с флагами изменения.
Прогресса в решении проблемы нет.
Помогите плиз.
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604663
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipok,

Очень странное решение с точки зрения дизайна. То, что выглядит логичным для разработчика ни разу не пахнет даже намёком на какую-то логику у обычного рядового пользователя.

И похоже, что тут надо делать каскад. Либо выносить вот эти БОЛЬНИЧНЫЕ и т.п. в отдельное поле вообще, тогда и проблем не будет ни у кого.
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604692
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipok,

$(document).on("click", "#ContractID", function (e) {

лучше делать в
$(document).ready
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604709
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел я в чем проблема.
После выбора выпадашки в другой выпадашке все отрабатывает корректно.
Код: html
1.
<option value="22" selected="selected">Больничный                                                                                                                                                      </option>


Просто значение не ставит нужное.
Отсюда вопрос, как заставить его отображать значение корректно согласно опции selected="selected"?

Вадя, спасибо за свет, переделаю.
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604764
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipok,

выложи тут https://jsfiddle.net/ для демонсрации глюка
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604797
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяvadipok,

выложи тут https://jsfiddle.net/ для демонсрации глюка

https://jsfiddle.net/9nwex5mb/8/
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604815
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipok,
надо производить идентификацию не содержимому, а по дополнительному атрибуту data-
<option value="-3" data-name="xxx" >Социальный отпуск</option>
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604821
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipok,
вот тут
var employmentValue = $("#EmploymentID option:selected").text().trim();
if (employmentChange == 1 && (
employmentValue == 'Больничный' ||
employmentValue == 'Командировка' ||
employmentValue == 'Отпуск' ||
employmentValue == 'Отпуск без содержания' ||
employmentValue == 'Социальный отпуск')) {
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604835
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяvadipok,
вот тут
var employmentValue = $("#EmploymentID option:selected").text().trim();
if (employmentChange == 1 && (
employmentValue == 'Больничный' ||
employmentValue == 'Командировка' ||
employmentValue == 'Отпуск' ||
employmentValue == 'Отпуск без содержания' ||
employmentValue == 'Социальный отпуск')) {

Я не понимаю, имеете ввиду по value()?
Если так, то не пойдет.
Там для каждого отдела ID и соответственно value(), закодить все не получиться.
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604847
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipokЕсли так, то не пойдет.
Там для каждого отдела ID и соответственно value(), закодить все не получиться.нет
именно дополнительный атрибут
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604850
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipok,

<option value="-3" data-name="xxx" >Социальный отпуск</option>
только не надо получать и устанавливать атрибут data- с помощью jquery, это лучше делать с помощью чистого js.
у jquery своё понятие атрибута data-
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39604854
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39605202
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipok,
http://jquery.page2page.ru/index.php5/Заглавная_страница
https://learn.javascript.ru/
https://webref.ru/css
https://webref.ru/html

; надо ставить.
if ($(this).attr('selected') == 'selected')
правильнее заменить на
if ($(this).attr('selected') === 'selected')


Код: javascript
1.
2.
 $(document).on("click", "#ContractID", function (e) {
        var contractValue = $("#ContractID option:selected").text().trim();


правильнее
Код: javascript
1.
2.
$(document).on("click", "#ContractID", function (e) {
var contractValue=e.target.selectedOptions[0].value;



ну и дальше ещё много чего лишнего, и непонятно что и для чего....
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39605206
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗЫ
.trim();
это вообще лишнее, если появилась необходимость в твоём случае это использовать - значит есть полное непонимание что и как работает, и не умение пользоваться ide.
это не в обиду, а к тому что надо учиться очень много в этом направлении.
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39605460
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяЗЫ
.trim();
это вообще лишнее, если появилась необходимость в твоём случае это использовать - значит есть полное непонимание что и как работает, и не умение пользоваться ide.
это не в обиду, а к тому что надо учиться очень много в этом направлении.

Все нормально, я не обижаюсь на факты.
Проблему решил, надо было использовать prop('selected', true);
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
            $('select[name="ContractID"] option').each(function () {
                if ($(this).attr('selected') === 'selected') {
                    $(this).prop('selected', false);
                }
            })

            $("#ContractID option").filter(function () {
                return this.text.trim() == employmentValue;
            }).prop('selected', true);
...
Рейтинг: 0 / 0
Синхронизация двух выпадашек.
    #39605515
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipokВсе нормально, я не обижаюсь на факты.но у тебя там ещё куча мелких "говнокодиков"
прежде чем идти дальше - постарайся их убрать....
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Синхронизация двух выпадашек.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]