我基本上希望拥有像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中,如果用户点击任一按钮,我可以在我的控制器中查看他是否点击了HTML
或CSS
按钮。
到目前为止我尝试过的是(查看我的用户点击agree
或decline
的版本
<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
属性的decline
或value
值的任何内容。
我也尝试将其更改为ng-value
它对此测试没有任何影响。
我也知道我可以跳过表单并在任一按钮上使用ng-click
,我想我会这样做,但我仍然认为这提出了一个有趣的问题,因为根据W3Schools的例子,这看起来很可能
答案 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使用。