是否可以在表单上以编程方式调用Javascript的onsubmit事件?

是否可以在表单上以编程方式调用Javascript的onsubmit事件?,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,在RubyonRails中,我试图使用form_remote_标记助手更新div标记的innerHTML。每当关联的select标记接收到onchange事件时,就会发生此更新。问题是;不起作用。document.forms[0]也不提交。获取表单_remote _标记中生成的onsubmit代码以执行的唯一方法是创建一个隐藏的submit按钮,并从select标记调用按钮上的click方法。下面是一个有效的ERb部分示例 <% form_remote_tag :url => pro

在RubyonRails中,我试图使用form_remote_标记助手更新div标记的innerHTML。每当关联的select标记接收到onchange事件时,就会发生此更新。问题是;不起作用。document.forms[0]也不提交。获取表单_remote _标记中生成的onsubmit代码以执行的唯一方法是创建一个隐藏的submit按钮,并从select标记调用按钮上的click方法。下面是一个有效的ERb部分示例

<% form_remote_tag :url => product_path, :update => 'content', :method => 'get' do -%>
  <% content_tag :div, :id => 'content' do -%>
    <%= select_tag :update, options_for_select([["foo", 1], ["bar", 2]]), :onchange => "this.form.commit.click" %>
    <%= submit_tag 'submit_button', :style => "display: none" %>
  <% end %>
<% end %>
我想删除不可见的submit按钮,但使用直接表单。submit似乎不起作用。所以,我需要一些方法来调用表单的onsubmit事件代码

更新:猎户座爱德华兹解决方案将工作,如果没有一个错误;由Rails生成。我不确定哪一个更糟糕,发送一个幻影点击到一个不可见的提交按钮,或者在删除带有javascript字符串替换的返回调用后调用getAttribute'onsubmit'调用上的eval

给你的表格一个id

然后


如果您是通过innerHTML将Javascript加载到div中,它将不会运行…仅供参考。

如果您实际上不想提交表单,而只是调用onsubmit中的任何代码,您可能会这样做:未经测试

var code = document.getElementById('formId').getAttribute('onsubmit');
eval(code);

如果您必须使用Rail的内置Javascript生成,我将使用Orion的解决方案,但只需对返回代码进行一个小改动即可

eval ('(function(){' + code + '})()');
然而,在我看来,通过将Javascript代码分离到外部文件或单独的可调用函数中,从长远来看会更容易;如果语法失败,可能会起作用。即使这真的起作用了,通过选择一次改变来进行评估还是有点像犹太人区。另一个解决方案是让Rails将onsubmit代码注入select标记的onchange字段,但我不确定是否有办法做到这一点。ActionView具有指向远程的链接,但是在onchange字段中没有明显的帮助程序来生成相同的代码。

不要这样做

alert(typeof document.formName.onsubmit); // function
你有一个解决办法

停止,转到下一个功能点


我知道,这并不漂亮,但还有更大的问题。

不确定您是否有答案,但在select的onclick功能中,调用submit而不是submit。

我意识到这个问题有点老了,但您到底在做什么评估

document.getElementById('formId').onsubmit();
document.getElementById('formId').submit();

加载文档的DOM时,事件不再是字符串,而是函数

alert(typeof document.formName.onsubmit); // function

因此,没有理由将函数转换为字符串,以便对其求值。

这在理论上是可行的,但我仍然在生产中使用我的原始代码,只是为了避免使用求值。
document.getElementById('formId').onsubmit();
document.getElementById('formId').submit();
document.formName.onsubmit();
document.formName.submit();
alert(typeof document.formName.onsubmit); // function