Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 发现哪个表单按钮触发了提交_Javascript_Jquery - Fatal编程技术网

Javascript 发现哪个表单按钮触发了提交

Javascript 发现哪个表单按钮触发了提交,javascript,jquery,Javascript,Jquery,在我的表单中,我有两个提交按钮 <input type="submit" name="save" value="Save as draft"/> <input type="submit" name="send" value="Start sending" /> 如何检查按下了哪个按钮 $('input').each(function(n) { $(this).click( function() { var name = $(this).attr('name'

在我的表单中,我有两个提交按钮

<input type="submit" name="save" value="Save as draft"/>
<input type="submit" name="send" value="Start sending" />
如何检查按下了哪个按钮

$('input').each(function(n) {
  $(this).click( function() {
    var name = $(this).attr('name');

    if (name === 'save') {
       // do stuff
    }else if (name === 'submit'){
       // do some other stuff
    }
   }
});
当然,您也可以使用switch语句

如果要执行的作业复杂且不同,则应考虑使用2种不同的形式< /P> 我希望这能回答你的问题

编辑:

$('input:submit').click(function(n) {
    var name = $(this).attr('name');
    if (name === 'save') {
       // do stuff
    }else if (name === 'submit'){
       // do some other stuff
    }
   }
});

如果是我,我会做得有点不同。我会做一些类似的事情-

<button type='button' id='formSave'>Save as draft</button>
<button type='button' id='formSend'>Start Sending</button>

$('#formSave').click(function(){
    //submit form
    //task 1
});

$('#formSend').click(function(){
    //submit form
    //task 2
});
另存为草稿
开始发送
$('#formSave')。单击(函数(){
//提交表格
//任务1
});
$('#formSend')。单击(函数(){
//提交表格
//任务2
});
我只是根据你的按钮名和其他什么来回答,但听起来你想做些类似的事情

$(":submit").click(function() {
    $("form").data("submit-button", this.name);
});

$("form").submit(function() {
    var button = $(this).data("submit-button");
    ...
});

在保存名称的提交按钮上添加一个单击处理程序。然后在提交处理程序中提取该名称。

我建议使用HurnsMobile的方法,但如果您确实需要一个函数来处理这两个按钮,则可以使用jQuery事件对象来检测按钮

$('form').submit(function(event){
    if(event.target.name == 'save') {
        // do save task
    } else if (event.target.name == 'send') {
        // do send task
    }  
});

我相信您可以改进此问题的标题。为这两个问题添加单击处理程序buttons@aleksv请继续并将其发布,这样我就可以+1您在哪里检查按钮是否被单击?现在您正在向每个
输入添加事件处理程序,即使它不会做任何事情。似乎有点浪费。@Ibu将其优化为$(“输入”)。单击抱歉,吹毛求疵,但如果您使用
$('input:submit')
:),我会+1@JohnP yes会这样做,如果输入类型是submit,但在这种情况下,他将类型作为按钮。我认为第二个应该使用
“#formSend”
,这打破了非JavaScript支持。请编写不引人注目的JavaScript。@Raynos提出了一个很好的观点。还请记住,表单可以在不按按钮的情况下提交,比如在输入元素处于焦点时按return键;有些浏览器会伪单击最近的按钮,其他浏览器会在不伪单击按钮的情况下提交表单。@Raynos这是一个不显眼的JS。我想你的意思是你应该让页面降级。但是OP已经提到,他在发送数据到服务器的过程中有一个JS步骤。@ JNNP OK“不引人注目的JS”=保持HTML和JS分离。“渐进增强”=JS仅增强现有功能。明白了。哦,等等,我以为你只是在复制按钮的名称,按钮元素本身,而不是表单。但即便如此:为什么不将逻辑放在单击处理程序中,而不是表单的提交处理程序中?@MarcelKorpel,因为当您通过其他方法(如按ENTER)提交表单时,逻辑不会运行。您确定这样做有效吗。我相信有些浏览器会设置
event.target==form
$('form').submit(function(event){
    if(event.target.name == 'save') {
        // do save task
    } else if (event.target.name == 'send') {
        // do send task
    }  
});