IE не показывает тег <form>в буквальном тексте - PullRequest
0 голосов
/ 05 января 2010

Я использую литерал на своей странице, который имеет форму HTML.этот литерал отображается при нажатии на конкретную ссылку, на странице отображается оверлейный div, и он показывает форму на оверлейном div.Все браузеры работают нормально и точно так, как и ожидалось, но IE не показывает ничего на оверлейном div, то есть оверлейный div появляется, но пуст.Я попытался добавить теги к буквальному элементу управления один за другим, чтобы увидеть, какой именно тег вызывает проблему, и оказалось, что весь контент (элементы управления вводом HTML и т. Д.) Показывался в оверлейном элементе div, пока тег <form> не был добавленбуквальный текст.
Если свойство literal.Text не имеет тега <form>, содержимое хорошо отображается и в IE.Но проблема в том, что мне нужно иметь это <form> внутри литерала, поскольку я должен отправить данные обратно на внешнюю ссылку.Когда все другие браузеры работают нормально, что может быть проблемой в IE?

следующим является буквальное содержимое, когда оно установлено:

formSalesForce.Text = "<div style='clear:both'></div><h2 class='sIFR-replaced1' style='text-align:left'><embed height='20'  id='h2heading' width='282' src='frutiger_light.swf' quality='best' flashvars='txt=Document Description&amp;textalign=left&amp;offsetTop=0&amp;textcolor=#878787&amp;hovercolor=#76b404&amp;linkcolor=#87be22&amp;w=282&amp;h=20' wmode='transparent' bgcolor='transparent' sifr='true' type='application/x-shockwave-flash' class='sIFR-flash1' style='width: 282px; height: 20px;'/><span class='sIFR-alternate'>Document Description</span></h2>" + d.DocDescription + "<BR><p>Please fill out the following information so that we can proceed with providing you the link to the document</p><form  id='myDocForm' name='myDocForm' action='" + d.DataSubmissionPath + "' method='POST' ><table class='clearBoth' width='45%'><tr><td><input type=hidden name='oid' value='" + d.OID + "'></td><td><input type=hidden name='retURL' value='" + "" + "'></td></tr><tr><td class='formlabel' >First Name*</td><td class='formfield'><input type='text' id='first_name' size='20' maxlength='40' name='first_name'></td></tr><tr><td class='formlabel'>Last Name*</td><td class='formfield'><input type='text' id='last_name' size='20' maxlength='40' name='last_name'></td></tr><tr><td class='formlabel'>Email*</td><td class='formfield'><input type='text' id='email' size='20' maxlength='40' name='email'></td></tr><tr><td class='formlabel'>Work Title</td><td class='formfield'><input type='text' id='work_title' size='20' maxlength='40' name='work_title'></td></tr><tr><td class='formlabel'>Company</td><td class='formfield'><input type='text' id='company' size='20' maxlength='40' name='company'></td></tr><tr><td class='formbuttons'><input type='Button' name='btnsubmit' value='Submit' onclick='showDocPanel();'></td></tr></table></form>"

Ответы [ 3 ]

1 голос
/ 07 января 2010

Мне пришлось сделать следующий обходной путь:

Я использовал Request.Browser.Browser, чтобы проверить, был ли браузер IE ..., а затем я изменил текст в следующем формате:

 Dim s As New StringBuilder
    s.Append("<iframe name='myIframe' style='visibility:hidden;height:0;width:0;'></iframe><div style='clear:both'></div><h2 class='sIFR-replaced1' style='text-align:left'><embed height='20'  id='h2heading' width='282' src='swf/frutiger_light.swf' quality='best' flashvars='txt=Document Description&amp;textalign=left&amp;offsetTop=0&amp;textcolor=#878787&amp;hovercolor=#76b404&amp;linkcolor=#87be22&amp;w=282&amp;h=20' wmode='transparent' bgcolor='transparent' sifr='true' type='application/x-shockwave-flash' class='sIFR-flash1' style='width: 282px; height: 20px;'/><span class='sIFR-alternate'>Document Description</span></h2><p align='left'><i>" + d.DocDescription + "</i><BR><BR></p>")
    s.Append("<p>Please fill out the following information so that we can proceed with providing you the link to the document</p>")
    If (Not Request.Browser.Browser.Equals("IE")) Then
        s.Append("<form  id='myDocForm' name='myDocForm' target='myIframe' action='" + d.DataSubmissionPath + "' method='POST' >")
    End If

    s.Append("<table class='clearBoth' width='45%'><tr><td>")
    s.Append("<input type=hidden name='oid' id='oid' value='" + d.OID + "'></td><td>")
    s.Append("<input type=hidden name='retURL'  id='retURL' value='" + "" + "'></td></tr>")

    ' debug(info)
    s.Append("<input type='hidden' name='debug' value=1>")
    s.Append("<input type='hidden' name='debugEmail'")
    s.Append("value=''>")

    s.Append("<tr><td class='formlabel'>First Name*</td>")
    s.Append("<td class='formfield'><input type='text' id='first_name' size='20' maxlength='40' name='first_name'>")
    s.Append("</td></tr>")
    s.Append("<tr><td class='formlabel'>Last Name*</td>")
    s.Append("<td class='formfield'><input type='text' id='last_name' size='20' maxlength='40' name='last_name'>")
    s.Append("</td></tr>")
    s.Append("<tr><td class='formlabel'>Email*</td>")
    s.Append("<td class='formfield'><input type='text' id='email' size='20' maxlength='40' name='email'>")
    s.Append("</td></tr>")
    s.Append("<tr><td class='formlabel'>Work Title</td>")
    s.Append("<td class='formfield'><input type='text' id='work_title' size='20' maxlength='40' name='work_title'>")
    s.Append("</td></tr>")
    s.Append("<tr><td class='formlabel'>Company</td>")
    s.Append("<td class='formfield'><input type='text' id='company' size='20' maxlength='40' name='company'>")
    s.Append("</td></tr>")
    s.Append("<tr><td>&nbsp;</td>&nbsp;<td></td></tr>")     'empty row for spacer cells
    s.Append("<tr><td>&nbsp;</td><td class='formbuttons'  align='right'><input type='Button' id='btnsubmit' name='btnsubmit' value='Submit' onclick='showDocPanel();'>")
    s.Append("</td></tr>")
    s.Append("</table>")
    If (Not Request.Browser.Browser.Equals("IE")) Then
        s.Append("</form>")
    End If
formSalesForce.Text=s.ToString()

Таким образом, браузер IE показал таблицу, так как при использовании IE тег не был прикреплен к литералу.

Теперь; при использовании IE у меня возникла проблема с отправкой формы на внешний веб-сайт, так как формы не было, ее нельзя было отправить ... поэтому мне пришлось использовать дубликат формы, созданный javascript:

Использовал этот фрагмент JavaScript, взятый с этого сайта: http://en.allexperts.com/q/Javascript-1520/create-form-submit-fly.htm

 function getNewSubmitForm(){
 var submitForm = document.createElement("FORM");
 document.body.appendChild(submitForm);
 submitForm.method = "POST";
 return submitForm;
}

//helper function to add elements to the form
function createNewFormElement(inputForm, elementName, elementValue){
 var newElement = document.createElement("<input name='"+elementName+"' id='" + elementName + "' type='hidden'>");
 inputForm.appendChild(newElement);
 newElement.value = elementValue;
 return newElement;
}

//function that creates the form, adds some elements
//and then submits it
function createFormAndSubmit(){
var submitForm = getNewSubmitForm();
//alert("form created");
createNewFormElement(submitForm, "oid", document.getElementById("oid").value);
createNewFormElement(submitForm, "debug", "1");
createNewFormElement(submitForm, "debugEmail", "");
createNewFormElement(submitForm, "first_name", document.getElementById("first_name").value);
createNewFormElement(submitForm, "last_name", document.getElementById("last_name").value);
createNewFormElement(submitForm, "email", document.getElementById("email").value);
createNewFormElement(submitForm, "work_title", document.getElementById("work_title").value);
createNewFormElement(submitForm, "company", document.getElementById("company").value);
createNewFormElement(submitForm, "retURL", window.location.href);
//alert(window.location.href + "::elements added");
submitForm.action= "my external website url";
submitForm.target='myIframe';
//alert("submitting");
submitForm.submit();
}

Теперь, когда форма отправлялась на внешний URL-адрес, возникла обратная передача, чтобы обойти это, я сделал:

  • создал скрытый iframe и добавил его к литеральному тексту (см. Приведенный выше код для литерального текста)
  • установить в качестве цели формы имя этого фрейма (см. Приведенный выше код для литерального текста)
  • установить цель дублированной формы javascript в качестве имени этого кадра (см. Приведенный выше код javascript)
1 голос
/ 05 января 2010
0 голосов
/ 07 января 2011

Установка поля формы на ноль также должна работать:

.formStyle { поле: 0px; }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...