2

我正在使用jquery 表单插件,它使用 jquery ajax 来完成大部分工作。我们有 jquery 1.7.2

我们使用它通过 ajax 向服务器发送一个表单,并返回一个表示成功的值或返回带有验证错误的表单。

当在验证中发现错误时,我让它在 firefox 和 chrome 中工作,包含旧表单的 div 的内容被替换为有错误的新表单。

$('#FormDiv').empty().html(response);

响应如下所示:

<form action="/MyForm/Edit" id="MyForm" method="post"><input id="Id" name="Id" type="hidden" value="" />
    <input id="PlantId" name="PlantId" type="hidden" value="1" />
    <table>
        <tr><td class="field">
                ID
            </td>
            <td>
                <input class="required" id="MyId" name="MyName" type="text" value="JP001" />

            </td>
            <td class="field">Description</td>   
            <td><input class="required" id="Description" name="Description" type="text" value="" />
        </tr>
        <tr>
            <td class="field">Created by</td>
            <td>Joe Bloggs</td>
            <td class="field">Create date</td>
            <td>15/06/2012</td>
        </tr>
    </table>
</form>

在 IE 中调试,我可以看到 ajax 调用实际上在其返回正文中有这个,但是我的方法的参数是删除外部形式的开始和结束标记,所以基本上它只是一个表。

我尝试了一些不同的方法来解决这个问题,包括将 processData 设置为 false(不确定这是否真的会影响它)并将 returnType 设置为“text”和“html”,但没有一个真正有帮助。

有任何想法吗?


所以事实证明,如果我将表单包装在一个 div 中,一切似乎都可以正常工作,不太确定那里发生了什么,如果有人可以解释这一点,他们可以得到答案

4

1 回答 1

2

这不是一个 jQuery 错误。

这是一个不太知名的 Javascript “功能”

显然,FF3 和 IE6+(也许还有其他)中的 innerHTML 不喜欢将表单标签作为innerHTML的一部分。如果你愿意,你可以测试它:

<div id="test">
   <form>
      <input>
   </form>
</div>

<script>
    window.onload=document.getElementById('test').innerHTML = "<form><input type="hidden" name="blah"></form>";
</script>



Result:

<div id="test">
    <input type="hidden" name="blah">
</div>

不太清楚为什么,但这就是他们实现它的方式。

于 2012-06-19T10:31:23.957 回答