点击<div id="roomTypeContainer">
时,我想执行回发以获取数据
所以,将它包裹在LinkButton
内。当我点击div
时,浏览器控制台出错。
未捕获的TypeError:theForm.submit不是函数
转发器位于用户控件
中ASCX:
<asp:Repeater ID="rpRoomTypes" runat="server" ItemType="Sitecore.Data.Items.Item"
OnItemDataBound="rpRoomTypes_ItemDataBound" OnItemCommand="rpRoomTypes_ItemCommand">
<ItemTemplate>
<sc:EditFrame ID="efRoomType" runat="server" >
<asp:LinkButton ID="lnkRoomType" runat="server" CommandName="cmd_RoomType">
<div id="roomTypeContainer" runat="server">
..some html
</div>
</asp:LinkButton>
</sc:EditFrame>
</ItemTemplate>
</asp:Repeater>
更新 当我单击浏览器控制台中的错误链接时,此代码将显示在控制台中:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['mainform'];
if (!theForm) {
theForm = document.mainform;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit(); //error here
}
}
</script>
以上代码似乎是由Sitecore生成的。 mainform
是aspx页面中表单的id。
答案 0 :(得分:1)
在生成的JS中查看这一行:
var theForm = document.forms['mainform'];
theForm是一个在页面加载时设置的全局变量,但是我想知道表单元素是否还没有在那时创建(或者在脚本块之后 - 这也会导致问题)。然后,当函数在doPostback中运行时,theForm.submit函数将不存在,因为即使表单现在存在,引用它的变量仍然为null。
在控制台中,只需键入theForm并按Enter键(不在控制台中指定)并查看其设置内容。如果它是null / undefined,那就是正在发生的事情,在这种情况下需要更多的信息来诊断失败(例如,为什么表单尚未创建)。
答案 1 :(得分:0)
使用name =“mainform”而不是id =“mainform” document.forms ['something']使用name,但不是id
答案 2 :(得分:0)
"Submit is not a function" error in JavaScript
&#34;提交不是一个功能&#34;意味着您命名了提交按钮或 其他一些元素提交。将按钮重命名为btnSubmit和您的 电话会神奇地工作。
当您将按钮命名为submit时,您将覆盖submit()函数 形式。
确保没有名称=&#34;提交&#34;或id =&#34;提交&#34;在表格中。
答案 3 :(得分:0)
您可以显示转发器生成的浏览器HTML代码吗?我怀疑您的UserControl sc:EditFrame
生成iframe,而您的LinkButton在加载到此iframe(不包含表单)的文档的上下文中工作。
答案 4 :(得分:0)
form.onSubmit
是提交事件的事件侦听器,如果在执行期间未设置处理程序,则form.onsubmit()
将引发错误。
答案 5 :(得分:0)
您的用例非常模糊。你为什么要把一个div放在一个LinkButton中,那也是在一个转发器中?它甚至可以点击吗?您是否在点击div时发出了警告?
另请发布rpRoomTypes_ItemDataBound和rpRoomTypes_ItemCommand方法。