0

你不得不原谅我在这里问了一个微不足道的问题,但我通常很好奇是否有更好的方法来检测是否按下了按钮。我猜这也适用于锚标签。

目前我有两个提交按钮(所以我不能$(form).submit在这种情况下使用),当它们被激活时,它们都会改变另一个字段:

<button id="accept" type="submit">Accept</button>
<button id="decline" type="submit">Decline</button>

为了实现这一点,我已经分别检测到了一个点击事件和 Enter keypress 事件:

$('#accept').click(function(){ $('#decision').val('Agree');  })
$("#accept").keyup(function(event){
    if(event.keyCode == 13){
        $('#decision').val('Agree');
    }
});

我想最重要的是我想知道是否有办法简化这段代码,因为它相当麻烦,特别是如果有很多处理(你可以创建一个函数,但那是另一个步骤)并且因为 jQuery 似乎有大多数事情都涵盖了,在搜索互联网后我很惊讶我找不到更清洁的解决方案。

(上面我担心模仿按钮按下的其他方法,比如点击空格,虽然这似乎被覆盖了!)

谢谢!

4

4 回答 4

2

你可以做这样的事情来使点击更好一点:(在这里使用一个函数来获得更好的东西是必要的):

function setDecision(value){
    $('#decision').val(value);
}

$('button[type=submit]').click(function() {
    var val = $(this).text();

    setDecision(val);
});

$("button[type=submit]").keyup(function(event){
    var val = $(this).text();

    if(event.keyCode == 13){
        setDecision(val);
    }
});
于 2012-06-20T14:45:57.357 回答
2

对于按钮元素,在按钮上按下空格键和回车键都会根据 W3C 事件规范生成点击事件。您不必进行任何特殊处理来处理它。

至于使用$(form).submit(),你可以。只需通过将按钮更改为按钮 (W3C)来更改按钮以不隐式提交表单:

<button type="button" id="...">...</button>

然后在您的处理程序中,您可以执行以下操作:

$('#accept,#decline').click(function(event){
    $('#decision').val($(event.target).text());
    $(form).submit();
}

如果需要,您可以在必要时进行一些处理$(event.target).text()以使“拒绝”为空/空字符串。

于 2012-06-20T14:54:55.137 回答
1

我想我理解你的问题,在这个相关主题中可能会有一些优先级。

jQuery:如何获取表单提交时点击了哪个按钮?

此方法避免向每个按钮添加 .click() 事件,尽管这对于您的应用程序来说可能是一个可行的选项。

希望这可以帮助!石匠

于 2012-06-20T14:45:43.883 回答
1

添加name="decision"value="Accept"/ value="Decline"(相应地)到提交按钮

这样你根本不需要javascript来处理这个......

如果“接受”按钮是第一个,那么在任何表单字段中按 Enter 也会触发该按钮

样本:

<form action="1.html" method="get">

<input type="text" name="in">

<button type="submit" name="decision" value="Accept">Accept</button>
<button type="submit" name="decision" value="Decline">Decline</button>

</form>
于 2012-06-20T14:49:31.953 回答