jquery возвращает true обработчику событий, но событие (получить ввод) не будет завершено - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть форма, которая содержит входные радиоэлементы (2-й уровень под заголовком) в заголовки (для создания выделения) - это было проверено и работает нормально.

Для управления заголовками у меня есть запрос события click, который выполняет (проверенные) действия, когда заголовок находится не в описанном случае. Так что, если мы не находимся в случаях, событие .click simple возвращает true для продолжения сразу после теста (простое if).

Проблема в том, что ввод не выполняется (переключатель, который находится в заголовке, никогда не проверяется).

Примечание. Если действия выполнены (тест не выполнен), то действия выполняются, и пользователю требуется второй щелчок, чтобы получить переключатель для проверки. Это единственный случай, когда я мог проверить переключатель.

Код JS (суммирован):

$(".H_title")
        .focusin(function(event) {
            if ( ... )  { do stuff }
            return true; // go on action
          } )
        .focusout(function() {...do_stuff);} );
//END

В чем может быть причина?

Примечание: я не могу ничего изменить в структуру html, над которой я работаю, потому что она генерируется несколькими кодами (php и другими js). Я должен иметь возможность проверять переключатели на странице, не меняя структуру и содержание.

С наилучшими пожеланиями

втройне

1 Ответ

0 голосов
/ 12 ноября 2018

Спасибо charlietfi за помощь в этом вопросе.

Я понимаю, что мои объяснения не были достаточно точными, чтобы понять ситуацию. Ещё я внес ошибку при копировании кода.

Существует настоящая проблема, в которой я нашел решение, которое достигает цели, но я не уверен ни в объяснении того, почему он не функционировал, и почему он функционирует сейчас.

Там, где два шага развития:

1 - Просто выполняйте вещи, когда щелкает область в заголовке (и не затрагивает другую вещь в фокусе элемента, пока нажата клавиша Shift) Структура HTML содержит:

<h5>
   <span class="toc-target" tabindex="1000"> <!-- puts the "target" on top -->
      <span class="H_title">
           Adhérent
      </span>
   </span>
   <span class="endof_tocid"></span>
</h5>

Причина первых двух уровней SPAN заключается в том, что он выполняется двумя разными частями программы и требует двух разных классов.

Связанный код, который функционировал (с трех лет):

$(".H_title")
        .click(function(event) {
            if ( ... )  { do stuff1 }
            return true; // go on action
          } )
        .focusin(function() {...do_stuff2a);} );
        .focusout(function() {...do_stuff2b);} );
//END

2- Мне нужно было в некоторых случаях иметь радио-кнопку и в этом случае не выполнять stuff1 (просто добавить ввод в заголовок), тогда HTML-код стал:

<h5>
   <span class="toc-target" tabindex="1000"> <!-- puts the "target" on top -->
      <span class="H_title">
         <input name="user_type" type="radio" value="adh">
           Adhérent
      </span>
   </span>
   <span class="endof_tocid"></span>
</h5>

и я написал код js, который не работает:

$(".H_title")
        .click(function(event) {
            if ( ... )  { do stuff1 }
            return true; // go on action of the click on the button
          } )
        .focusin(function() {...do_stuff2a);} );
        .focusout(function() {...do_stuff2b);} );
//END

По моему мнению, ошибка кажется, что радио-кнопка становится недоступной в промежутке H_title, пока она не имеет кода для управления событием. Примечание: то же самое относится и к действиям и событиям фокусировки.

Если для события click не написан код Jquery, все работает нормально.

//BEGIN    
$(".toc-target > input")
      .click( function(){ return true; }); 
      .focusin(function() {return true; } );
      .focusout(function() {return true; } );
$(".H_title")
        .click(function(event) {
            if ( ... )  { do stuff1: move-top }
            return true; // go on actions
          } )
        .focusin(function() {...do_stuff2a);} );
        .focusout(function() {...do_stuff2b);} );
//END

С этим кодом клик на функции ввода, каково поведение: 1 - события $(".toc-target > input") генерируются и возвращают true, что, кажется, ничего не делает, приводит к нормальному выбору переключателя и пузырьков событий. 2- H_titles получает событие click, и оно выполняется как обычно.

На данный момент focusin-focusout по-прежнему не работает в сочетании с кнопками. Я думаю, что проблема возникает из-за конфликта с щелчком (тот факт, что заголовок получает фокус при нажатии). Я должен уточнить некоторые из них по поводу полной эргономики и совместимости (доступно на ПК и мобильных устройствах).

Другое решение может заключаться в том, что это похоже на "распространение" от H_title до "ввода" , но я не нашел хорошего способа сделать все необходимое в stuffxx и четко разделить действия.

Может быть, я ошибаюсь или у вас есть предложения, как сделать это наилучшим образом.

С уважением

втройне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...