3

我想知道如何在表单内部设置事件时获取formmethod、或。formactionformenctypeformtarget<input type="submit">submit

<form action="/url" method="POST">
  ...
  <input type="submit" value="Action 1" formaction="/another-url">
  <input type="submit" value="Action 2" formmethod="PUT">
</form>
 $(function(){
   $('form').bind('submit', function(){
     // how to get it here?
     // need to know if action1 or action2 was clicked, and if any of them have "form*" attributes
     return false;
   });
 });

他们在这里解释http://www.adobe.com/devnet/dreamweaver/articles/html5-forms-pt2.html#articlecontentAdobe_text_31

由于我正在创建一个 jQuery 插件,我不知道它会在哪里使用,所以它必须是一个万能的解决方案。jQuery 似乎还无法处理它以提供安全的跨浏览器解决方案。

谢谢

4

2 回答 2

2

我正在解决这个问题:

$('form > button[type="submit"]').bind('click', function() {
    this.parentNode.action = this.getAttribute('formaction');
});

此片段假定button是 的直接后代form,但可以轻松扩展为更通用。

我认为这是标准中的一个缺陷,真正的表单动作应该可以通过 JavaScript 以某种方式访问​​,而无需触摸按钮或其值。据我所知,没有变通办法是不可能的。

于 2013-04-08T21:26:03.737 回答
1

找到了答案,但我不知道它是否是跨浏览器:

$('form').on('submit', function(event){
   var submit_button = event.originalEvent.explicitOriginalTarget;
   if (submit_button.attr('formaction')){
      // form action, enctype, etc
   }
   return false;
});

编辑:这仅适用于 Gecko,我正在寻找替代品。好像 IE 有event.srcElement,但不一样。event.originalEvent.explicitOriginalTarget是要走的路,但只能在 Firefox 中使用,Chrome 或 IE 也没有办法做到这一点。

submit除非绑定到按钮(<input type="submit">和),否则没有跨浏览器的方式来执行此<button type="submit">操作,但这不适用于手动设置将通过 Javascript 提交的按钮,而绑定“提交”它将按预期工作

于 2012-12-11T20:35:28.213 回答