#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.