Первая вкладка не работает с текстовыми полями в MVC 2 - PullRequest
0 голосов
/ 08 июня 2011

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

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

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

<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 Ответ

0 голосов
/ 08 июня 2011

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

$('.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.

...