2016-04-24 3 views
12

У меня есть следующий JavaScript, который загружает форму в скрытый DIV на странице и показывает ДИВформа не отображается в IE

function load() { 
    ...stuff to get date and id... 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
     if (xhttp.readyState==4&&xhttp.status==200) { 
      document.getElementById("PopupDiv").innerHTML = xhttp.responseText; 
      document.getElementById("PopupDiv").removeAttribute("hidden"); 
      alert(xhttp.responseText); 
     } 
    }; 
    xhttp.open("GET", "Object?date=" + date + "&id=" + id, true); 
    xhttp.send(); 
} 

это загружает частичный вид со следующим:

<h2>@Model.date</h2> 
<h2>@Model.id</h2> 
<div id="OptionsDiv"> 
    @using (Html.BeginForm("Confirm", "Plan",FormMethod.Post,new { id = "OptionsForm" })) 
    { 
     @Html.HiddenFor(x => x.date) 
     @Html.HiddenFor(x => x.id) 
     @Html.LabelFor(x => x.options) 
     @Html.DropDownListFor(x => x.options, Model.optionsDropdown) 
     <br /> 
     @Html.LabelFor(x => x.comment) 
     @Html.TextBoxFor(x => x.comment) 
     <br /> 
     <input type="submit" value="Submit"/> 
    } 
</div> 
<p>test after the div</p> 

при запуске события javascript, все это правильно загружено при просмотре DOM-проводника, но форма не отображается. отображается информация до и после, но ничего в форме.

предупреждение от ответа содержит:

<h2>5/12/2016 12:00:00 AM</h2> 

<h2>13</h2> 

<div id="OptionsDiv"> 

<form action="/Plan/Confirm" id="PlanOptionsForm" method="post"><input data-val="true" data-val-date="The field date must be a date." data-val-required="The date field is required." id="date" name="date" type="hidden" value="5-12-2016" /><input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Id" name="Id" type="hidden" value="13" /><label for="Options">options</label><select data-val="true" data-val-number="The field meal must be a number." data-val-required="The meal field is required." id="meal" name="meal"><option selected="selected" value="0">--Choose an Option--</option> 

<option value="1">Option 1</option> 

<option value="2">Option 2</option> 

<option value="3">Option 3</option> 

<option value="4">Option 4</option> 

</select>  <br /> 

<label for="comment">comment</label><input data-val="true" data-val-number="The field servings must be a number." data-val-required="The comment field is required." id="comment" name="comment" type="text" value="0" />  <br /> 

     <input type="submit" value="Submit"/> 

</form></div> 

<p>test after the div</p> 

Если я иду в DOM исследователя и выбрать различные части, они будут отображаться, но первоначальная нагрузка выглядит следующим образом:

screenshot

Все это правильно отображается в Chrome и Firefox

Кроме того, удаление другой формы на странице не решит проблему ,

+0

На вашей странице содержится 'form' вокруг' popupDiv'? –

+0

На странице есть другая форма, но она не содержит моего popupDiv – Alex

+0

Если 'popupDiv' не находится внутри формы, то он работает в Edge, как и ожидалось. Если 'popupDiv' находится внутри формы, то Edge (и FF) удаляет внутреннюю' форму' и сохраняет внешнюю. Отображается содержимое внутренней формы. Отправить переходит к внешнему действию формы. Это то, что я нашел из эксперимента. Вложенные формы не допускаются. EI 11 делает то же самое. Проверьте содержимое вашего ответа xhr. –

ответ

5

По-видимому, вы не можете загрузить форму в скрытый элемент.

Я изменил порядок в моей функции JavaScript из:

document.getElementById("PopupDiv").innerHTML = xhttp.responseText; 
document.getElementById("PopupDiv").removeAttribute("hidden"); 

To:

document.getElementById("PopupDiv").removeAttribute("hidden"); 
document.getElementById("PopupDiv").innerHTML = xhttp.responseText; 

и теперь он работает.

+0

Я использовал любой способ, и форма появилась и работала во всех браузерах. –

Смежные вопросы