以角度

时间:2017-01-03 14:00:58

标签: javascript html angularjs forms

我基本上希望拥有像this example at W3Schools

这样的功能
<form action="demo_form.asp" method="get">
Choose your favorite subject:
<button name="subject" type="submit" value="fav_HTML">HTML</button>
<button name="subject" type="submit" value="fav_CSS">CSS</button>
</form>

除了在Angular中,如果用户点击任一按钮,我可以在我的控制器中查看他是否点击了HTMLCSS按钮。

到目前为止我尝试过的是(查看我的用户点击agreedecline的版本

<form name="agrCtrl.agreement" ng-submit="agrCtrl.submit()">
    <button class="form-control btn btn-primary" type="submit" value="agree">
        Agree
    </button>
    <button class="form-control btn btn-primary" type="submit" value="decline">
        Decline
    </button>
</form>

和控制器

'use strict';

angular.module('app')
.controller('AgreementController', AgreementController);

function AgreementController() {
  var agrCtrl = this;

  agrCtrl.submit = submit;

  //////////

  function submit() {
    console.log(agrCtrl.agreement);
  }
}

但是,当我记录agrCtrl.agreement时,我找不到指向agree属性的declinevalue值的任何内容。

我也尝试将其更改为ng-value它对此测试没有任何影响。

我也知道我可以跳过表单并在任一按钮上使用ng-click,我想我会这样做,但我仍然认为这提出了一个有趣的问题,因为根据W3Schools的例子,这看起来很可能

1 个答案:

答案 0 :(得分:1)

当您提交表单时,您用来执行该表单的提交按钮是成功的,并且其名称=值对将在HTTP请求中与其余表单数据一起提交(这是您链接到的示例的方式)作品)。

当您第一次提交客户端提交事件时,没有关于使用哪个提交按钮来触发可用事件的信息。

所以你必须这样做:

  

我也知道我可以跳过表格,只需按任意按钮

要解决类似的问题(在我有jQuery而不是Angular的环境中,虽然原理是相同的)我这样做了:

    // Add hidden inputs when a button is clicked so that we can maintain the name/value despite GA tracking interference
    $f.on("click", "button, [type=submit]", function(event) {
        // Get the existing tracker
        var $tracker = $f.find("input[type=hidden].selectedsubmitbutton");
        if (!$tracker.length) {
            // Create a new tracker if we can't find one
            $tracker = $("<input />")
                        .attr("type", "hidden")
                        .addClass("selectedsubmitbutton")
                        .appendTo($f);
        }
        // Update the tracker with the data from the submit button that was just clicked
        $tracker
            .attr('name', this.name)
            .val(this.value);
    });

...由于隐藏的输入总是成功并出现在表单中,因此它们可供服务器和任何可以访问表单对象的JS使用。