0

我有以下html:

<form id="forum_jump" action="http://www.url.com/index.php?" method="get">
        <fieldset>
            <select name="showforum" id="showforumJump" class="input_select">
                <optgroup label="Redirect">
                    <option value="0">Frontpage</option>
                    <option value="1">Forum 1</option>
<option value="2" selected="selected">&nbsp;&nbsp;|-- Forum 2</option>
<option value="3">&nbsp;&nbsp;|-- Forum 3</option>
<option value="4">&nbsp;&nbsp;|-- ...</option>

                </optgroup>
            </select>

            <input type="submit" value="Ok" class="input_submit alt" id="forum_jump_submit">
        </fieldset>
    </form>

我知道我可以更改选择 html 以告诉它在选择更改时提交表单:

<select name="showforum" id="showforumJump" class="input_select" onchange="forum_jump.submit()">

但是如何将其转换为脚本块?我尝试在 Chrome 开发控制台中手动运行以下内容:

document.getElementById('showforumJump').addEventListener("change", forum_jump.submit(), false );

我也尝试了 attachEvent,在我读到这似乎只是针对 IE(?)之前。

addEventListener 在立即重新提交表单并重新加载页面之前以将“未定义”写入控制台结束。我希望控制台在重新提交之前等待我更改选择的值。当我尝试在网站上实现时,我还尝试将它包装在 window.onload 中,但它只是以无限循环结束。

我对 addEventListener 有什么误解,这里出了什么问题?老实说,我看不出来。

这可能是非常简单的事情,但我已经尝试和研究了一段时间,只是无法弄清楚我做错了什么。

4

2 回答 2

3

考虑以下代码:

document.getElementById('showforumJump').addEventListener("change", forum_jump.submit(), false );

您正在将“更改”事件绑定到 forum_jump.submit() 的输出。尝试将其包装在一个函数中,以防 forum_jump.submit() 依赖于这个符号:

document.getElementById('showforumJump').addEventListener("change", function() { forum_jump.submit.apply(forum_jump, arguments); }, false );

如果在没有参数的情况下调用 submit() ,这对您的情况来说可能是多余的。您可能只需删除括号:

document.getElementById('showforumJump').addEventListener("change", forum_jump.submit, false );

The apply construction is to forward all arguments passed to the function, which is probably not needed here. For an explanation of scoping and the 'this' symbol, see for example:

http://odetocode.com/blogs/scott/archive/2007/07/04/function-apply-and-function-call-in-javascript.aspx

于 2013-05-17T09:55:56.207 回答
2

forum_jump.submit() 应该没有 () 因为它是对执行的引用,而不是执行本身:

document.getElementById('showforumJump').addEventListener("change", forum_jump.submit, false );
于 2013-05-17T09:55:41.407 回答