【问题标题】:onchange this.form.submit() not working for web formonchange this.form.submit() 不适用于网络表单
【发布时间】:2012-09-05 06:42:11
【问题描述】:

以这种方式工作太久了...但似乎无法确定问题所在。已经阅读了数十篇关于 stackoverflow 和其他地方的文章。

当我单击并更改值时,它不会自动提交:

   <form id="orderbyfrm" name="orderbyfrm" action="http://staging.whiterabbitexpress.com/" method="post" class="orderbyfrm">
            <input name="s" value="<?php echo $wre_search_txt?>" type="hidden">
            <label for="orderby" class="sortByLabel">Sort by&nbsp;</label>
            <select class="sortByDropdown" name="orderby" id="orderby" onchange="this.form.submit();">
                <option value="Relevance">Relevance</option>
                <option value="likes" selected="selected">Likes</option>
            <option value="comments" selected="comments">Comments</option>
            </select>
</form>

在 Chrome 检查器中我看到一个错误 “未捕获的 TypeError:无法调用 null 的方法‘提交’”onchange

我也试过 onchange="javascript:document.orderbyfrm.submit" 但也没有用。

【问题讨论】:

  • 可能是范围问题。查看this的范围
  • 我也试过 onchange="javascript:document.orderbyfrm.submit" 但这也没有用。不确定如何更改“this”的范围。如果这个范围是错误的,有什么解决方法吗?
  • 您确定粘贴的表格完全相同吗?这个表格没有问题..
  • @Varun Achar,问题不能在 this 的范围内,因为在属性 this 中定义的内部事件代码始终指向元素。

标签: javascript submit form-submit onchange


【解决方案1】:

可能您在某处有名为formsubmit 的元素或JS 对象,与实际形式相冲突。

最安全的方法是使用 document.getElementById:

<select onchange="SubmitForm('orderbyfrm');">

还有 JavaScript:

function SubmitForm(formId) {
    var oForm = document.getElementById(formId);
    if (oForm) {
        oForm.submit(); 
    }
    else {
        alert("DEBUG - could not find element " + formId);
    }
}

使用良好的旧警报进行进一步调试.. 而不是 alert("DEBUG ... 有这个:

var sDebugInfo = "found " + document.forms.length + " forms: \n";
for (var i = 0; i < document.forms.length; i++) {
    var curForm = document.forms[i];
    sDebugInfo += "name: " + curForm.name + ", id: " + curForm.id;
    sDebugInfo += "\n";
}
alert(sDebugInfo);

根据你得到的结果,调试应该继续。

【讨论】:

  • 感谢您的想法。我在表单中添加了一个 id="orderbyfrm" 并添加了此代码,但现在得到:DEBUG: count not find element orderbyfrm ugg
  • 发生了一些非常可疑的事情。当您输入alert(document.forms.length); 时,您会得到什么?
  • 我应该把它放在哪里?任何地方?我在表单之后添加了它,但它只是在我的 HTML 警报(document.forms.length)上回显;
  • 查看我的编辑。您现在在列表中看到姓名和 ID orderbyfrm 了吗?
  • 为了记录,我打电话给我的submit 按钮"submit",这就是问题所在。正如您所建议的,这阻止了 this.form.submit() 按预期执行。我将提交按钮重命名为它,并且 javascript 部分工作。留下此评论,因为它可能对以后遇到同样问题的其他人有用。
【解决方案2】:

对不起各位!我发现了问题。我在这个表单周围有一个损坏的 div

<div id="orderby" class="orderby
<form id="xxx" name="xxx" action="#" method="post" class="orderbyfrm">

固定:

非常感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多