Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Синхронизация двух выпадашек. / 16 сообщений из 16, страница 1 из 1
20.02.2018, 11:15
    #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
20.02.2018, 11:17
    #39604663
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация двух выпадашек.
vadipok,

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

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

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

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


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

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

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

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

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

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

<option value="-3" data-name="xxx" >Социальный отпуск</option>
только не надо получать и устанавливать атрибут data- с помощью jquery, это лучше делать с помощью чистого js.
у jquery своё понятие атрибута data-
...
Рейтинг: 0 / 0
20.02.2018, 14:52
    #39604854
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация двух выпадашек.
...
Рейтинг: 0 / 0
21.02.2018, 07:19
    #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
21.02.2018, 07:24
    #39605206
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация двух выпадашек.
ЗЫ
.trim();
это вообще лишнее, если появилась необходимость в твоём случае это использовать - значит есть полное непонимание что и как работает, и не умение пользоваться ide.
это не в обиду, а к тому что надо учиться очень много в этом направлении.
...
Рейтинг: 0 / 0
21.02.2018, 13:08
    #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
21.02.2018, 13:54
    #39605515
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация двух выпадашек.
vadipokВсе нормально, я не обижаюсь на факты.но у тебя там ещё куча мелких "говнокодиков"
прежде чем идти дальше - постарайся их убрать....
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Синхронизация двух выпадашек. / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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