Первое нажатие табуляции не работает с текстовыми полями в MVC 2

#asp.net-mvc-2 #internet-explorer-8 #internet-explorer-7

#asp.net-mvc-2 #internet-explorer-8 #internet-explorer-7

Вопрос:

У меня есть несколько текстовых полей, которые демонстрируют странное поведение в IE 7 и IE 8 (но не в IE 9 / Chrome):

  • Когда я перемещаю фокус между текстовыми полями (без ввода каких-либо символов), используя клавишу tab или щелчок мыши, все работает так, как ожидалось.
  • Как только я ввожу символ в текстовое поле, для переключения фокуса на следующее текстовое поле требуется либо два нажатия клавиши tab, либо два щелчка мыши на другом элементе управления.
  • Похоже, что первое событие каким-то образом теряется?

Вот код для элементов управления:

 <div class="smpoe-field-container smpoe-div-column-four">
   <%=Html.EditorFor(m => m.SegmentNumber, new {model = Model})%>
</div>
<div class="smpoe-field-container smpoe-div-column-four">
   <%=Html.EditorFor(m => m.AmountOrPercent, new {model = Model})%>
</div>
<div class="smpoe-field-container smpoe-div-column-four">
   <%=Html.EditorFor(m => m.RandomLowNumber, new {model = Model})%>     
</div>
  

Они определены в моей ViewModel следующим образом:

 [UIHint("InputTextField")]
[DisplayName("Segment Number")]
[DomainModelProperty(Key = "PCS.SegmentNumber")]
public int SegmentNumber { get; set; }

[UIHint("InputTextField")]
[DisplayName("Amount/Percent")]
[DomainModelProperty(Key = "PCPP.AmountOrPercentValue")]
public decimal AmountOrPercent { get; set; }

[UIHint("InputTextField")]
[DisplayName("High Random Number")]
[DomainModelProperty(Key = "PSD.HighRandomNumber")]
public int RandomHighNumber { get; set; }
  

Добавление:
Я подтвердил, что могу исправить эту проблему, удалив UIHint, указывающий на мой шаблон. В попытке выяснить, что происходит, я в настоящее время удалил свое inputTextField до следующего кода, и проблема все еще возникает:

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<div class="smpoe-field-value">
    <%=Html.TextBox("", string.Empty)%>
</div>
  

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

Комментарии:

1. Вы пробовали отключить CSS и javascript, чтобы убедиться, что проблема не связана с каким-либо пользовательским правилом?

2. Я только что попробовал это. Отключение CSS или JavaScript устраняет проблему. Это был не тот результат, которого я ожидал.

3. что ж, по крайней мере, вы сузили круг своей проблемы.

4. @Darin Ну, ваша подсказка была правильной — все это было вызвано каким-то мошенническим JavaScript, который вмешивался там, где его не должно было быть. Спасибо, что нашли время прокомментировать.

Ответ №1:

В процессе устранения я обнаружил это:

 $('.smpoe-field-value input,.smpoe-field-value textarea,.smpoe-field-value select').live('change', function() {
  var parentForm = $(this).parents("form:first")[0];
  if(parentForm == undefined)
  parentForm = $(this).parents('.smpoe-entity-identifier')[0];
  if(parentForm == undefined)
  return false;
  jQuery.data(parentForm,"FormUpdated",true);
}); 
  

Возврат false приводил к отмене изменения в IE 7/8, но не в IE 9 или Chrome.

Очевидно, что эта процедура была изначально написана / протестирована в браузере, отличном от IE 7/8, где предполагаемое поведение происходило даже при возврате false.