ASP.NET linkbutton enabled=false не работает в Firefox

Я хочу отключить ASP.NET linkbutton, То, что я хочу, - это решение, при котором браузеры не позволяют мне нажимать на кнопку ссылки или, по крайней мере, когда соответствующее действие не выполняется.

Я делаю следующее на HTML-разметке, используя WebForms:

 <asp:LinkButton
       id="link1"
       text="Some button"
       runat="server"
       Enabled ="false"
 />

Я запускаю действие кнопки ссылки, используя события jQuery:

$('#link1').click(function (evt) {
    // Do something here
    return false;
});
  • В IE8 он отключен и не позволяет кликать
  • В Chrome это не отключено, но идентификатор не позволяет нажать
  • В Firefox 41.0.1 я все еще могу нажать кнопку ссылки и выполнить действие

Результат будет таким же, если я отключу его в коде:

this.link1.Enabled = false;

2 ответа

Решение

Отключение кнопки ссылки не предотвращает ее нажатие. В моем тесте отключенная кнопка ссылки отображается так:

<a class="aspNetDisabled">test</a>

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

Вот возможный обходной путь, который выполнит ваш js, только если кнопка включена:

$('#link1').click(function (evt) {
    if('<%=link1.Enabled%>' === 'True') {
      // Do something here
    }
    return false;
});

Даже если клиент вызывает отключенную кнопку, оператор if вызовет Do something here не бежать.

Не ясно, было ли оно упущено в вашем упрощении, но кажется, что ваш jQuery не будет выполнен из-за изменения идентификатора на стороне клиента кнопки. Вам нужно будет выполнить одно из следующих действий:

Задавать ClientIDMode в static на вашем контроле...

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

<asp:LinkButton
    id="link1"
    text="Some button"
    runat="server"
    Enabled ="false"
    ClientIDMode="static"
    />

или, получив идентификатор вашего элемента управления в вашем jQuery во время выполнения...

Хотя это будет работать только в том случае, если ваш jQuery находится на той же странице веб-формы, а не на внешней JS.

$('#<%= link1.ClientID %>').click(function (evt) {
    // Do something here
    return false;
});

Что бы вы ни выбрали...

Если он правильно связан, то вы можете использовать метод protectDefault() в jQuery, чтобы отключить запуск поста обратно.

$('#link1').click(function (evt) {
    evt.preventDefault();
    // Do something here
});
Другие вопросы по тегам