【问题标题】:Get form submit button value attribute value in angular以角度获取表单提交按钮值属性值
【发布时间】:2017-01-03 22:08:19
【问题描述】:

我基本上想要像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 时,我找不到任何指向 value 属性的 agreedecline 值的内容。

我也试过把它改成ng-value 对这个测试没有影响。

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

【问题讨论】:

  • 在每个按钮上都有ng-click,在控制器范围内设置一些值。 ng-click="this.btn = 'agree'",但不记得该语法是否有效。
  • 谢谢,但我在上一段中已经说过我知道这是可能的,但想看看其他方法是否可行(我要问的那个)

标签: javascript html angularjs forms


【解决方案1】:

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

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

所以你必须这样做:

我也知道我可以跳过表单,直接使用 ng-click 按钮

为了解决类似的问题(在我有 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 使用。

【讨论】:

  • 那你如何解释W3Schools这个例子?
  • @Matthias — 他们使用服务器端代码。我在答案的第一段中解释了。
  • 哦,我明白了。所以他们在 w3schools 使用传统的表单功能,而 angular 取消了他们的工作。意思是我不能重新创建那个例子,必须像你说的那样做ng-click
  • @Fissio Angular 实际上取消了默认表单提交(使用ng-submit)。避免像使用传统表单一样刷新页面。
  • 昆汀谢谢你。这是我的一个误解,我没有意识到我只想使用前端来做到这一点,但 w3schools 正在使用后端功能。
猜你喜欢
  • 1970-01-01
  • 2016-11-09
  • 2021-10-23
  • 2021-04-22
  • 2023-03-18
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
相关资源
最近更新 更多