2013-05-17 25 views
0

我有以下的html:如何将onchange =“form.submit()”移动到脚本标记中?

<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之前,我读这是appearantly只是IE(?)。

的addEventListener与“不确定”被写入到控制台,之前的形式重新提交立即和页面重新加载结束。我希望控制台等待我在重新提交之前更改选择的值。当我尝试在网站上实现时,我也尝试将其封装在window.onload中,但它只是以无限循环结束。

什么我误解有关的addEventListener和什么错误吗?我真的不能看到它。

这是probarbly很简单的东西,但我试过和研究了一段时间,只是不能找出我做错了。

+0

使用名称(标识),函数调用的不是结果。 – raina77ow

回答

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); 

这可能是矫枉过正的情况下,如果提交()被调用不带参数。你很可能只是去掉括号:

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

的应用施工是转发传递给函数,这可能是这里不需要所有的参数。对于作用域的解释和“本”符号,例如参见:函数的

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

+0

谢谢,使用forum_jump.submit没有pha​​renthesis似乎没有工作或做任何事情,但我没有。 的document.getElementById( 'showforumJump')的addEventListener( “变”,函数(){forum_jump.submit()},假); 而且工作。我会做一些阅读,以更好地了解为什么以及如何运作,谢谢。 – user1015149

+0

是的,这可能是因为forum_jump.submit()方法使用了“这个”符号,这将如果你非括号的事情不正确设置。 – Chris

2

forum_jump.submit()应该没有(),因为它是执行基准,而不是执行本身:

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

你好,我现在已经开始工作了,虽然上面的工作似乎也不适合我。但我这样做: 的document.getElementById( 'showforumJump')的addEventListener( “变”,函数(){forum_jump.submit()},假的)。 – user1015149

相关问题