Добавьте атрибут onblur обратно после его удаления - PullRequest
4 голосов
/ 04 июля 2019

У меня есть текстовое поле, которое использует onblur и ondblclick - когда они дважды щелкают, открывается всплывающее окно, но я не хочу, чтобы onblur срабатывал.

Когда вызывается функция двойного щелчка, я удаляю атрибут onblur, чтобы он не срабатывал.Это работает, но теперь я пытаюсь добавить onblur обратно после открытия всплывающего окна, но оно не работает

function OpenCust(v) {
             $('#<%= txtDebtor.ClientID %>').removeAttr('onblur');
             shadowboxopen = true;
             if (!v || 0 === v.length) {

             }
             else {
                 Shadowbox.open({
                     content: "lookups/Customer.aspx?NODEBT=true&CustomerAC=" + v,
                     player: "iframe",
                     onClose: function () { shadowboxopen = false; },
                     title: "Edit Customer"
                 });
             }
             $('#<%= txtDebtor.ClientID %>').attr('onblur');
        }

edit: изменен код, который используется для включения и выключения функции размытия, но onblur все еще получаетсрабатывает при двойном щелчке OpenCust.

текстовое поле: <asp:TextBox runat="server" ID="txtDebtor" onblur="CheckIfAccountCodeDebtValid(this.value)" ondblclick="OpenCust(this.value)"></asp:TextBox>

function OpenCust(v) {
         $('#<%= txtDebtor.ClientID %>').off('blur', CheckIfAccountCodeDebtValid(v));
         shadowboxopen = true;
         if (!v || 0 === v.length) {

         }
         else {
             Shadowbox.open({
                 content: "lookups/Customer.aspx?NODEBT=true&CustomerAC=" + v,
                 player: "iframe",
                 onClose: function () { shadowboxopen = false; },
                 title: "Edit Customer"
             });
         }
         setTimeout(function() {
             $('#<%= txtDebtor.ClientID %>').on('blur', CheckIfAccountCodeDebtValid(v));
         }, 2000);

    }

1 Ответ

2 голосов
/ 04 июля 2019

Вам нужно будет указать значение onblur при его повторном добавлении.Правильные функции в jQuery для этого: on() и off().В приведенном ниже примере вы можете увидеть, как я удаляю обработчик события размытия после нажатия на кнопку, но через 2 секунды добавлю его снова.Если кнопка потеряет фокус в течение этих 2 секунд, консольное сообщение не будет размыто.Если он теряет фокус после этого.

//Add blur event handler to the button
$('#button').on('blur', blurFunction);

//Add click event handler to the button
$('#button').on('click', function() {
  //Remove blur event handler
  $('#button').off('blur', blurFunction);
  console.log('click');
  setTimeout(function() {
    //reattach blur event handler after 2 seconds
    $('#button').on('blur', blurFunction);
  }, 2000);
});

//The actual blur event handler function
function blurFunction() {
  console.log(this.value);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="button" type="button" value="test-value">

С помощью функции, использующей параметр, вы можете обернуть его в анонимную функцию, как показано ниже.

//Add blur event handler to the button
$('#button').on('blur', function() {
  CheckIfAccountCodeDebtValid(this.value);
});

//Add click event handler to the button
$('#button').on('click', function() {
  //Remove all blur event handlers
  $('#button').off('blur');
  console.log('click');
  setTimeout(function() {
    //reattach blur event handler after 2 seconds
    $('#button').on('blur', function() {
      CheckIfAccountCodeDebtValid(this.value);
    });
  }, 2000);
});

//The actual blur event handler function
function CheckIfAccountCodeDebtValid(value) {
  console.log(value);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="button" type="button" value="test-value">
...