【问题标题】:How to know which button is clicked如何知道点击了哪个按钮
【发布时间】:2011-05-05 10:44:22
【问题描述】:

在我的页面中,我有许多编辑按钮,每个名称都以“edit”开头,然后是一些 id。我想知道我的任何编辑按钮是否被点击。 详细来说,我有表格。在表单中,我有许多名称以 "edit" 开头的编辑按钮、名称以 "delete" 开头的删除按钮和 1 个添加按钮。都是提交按钮。表单 onsubmit 我调用 JavaScript 函数,如果按钮是编辑确认(“某些文本”),我想要在其中提交表单。 我怎样才能在 JavaScript 中做到这一点? 我认为给所有这些按钮相同的 id 然后 getElementById 但是我如何改变?

【问题讨论】:

    标签: javascript html jsp button


    【解决方案1】:

    使用 jQuery 很简单:

    $(':button').click(function() {
      // reference clicked button via: $(this)
      var buttonElementId = $(this).attr('id');
    });
    

    试试看: http://jsfiddle.net/7YEay/

    根据 cmets 中的反馈进行更新

    这是未经测试的/伪代码:

    $(':submit').click(function(event) {
      var buttonName = $(this).attr('name');
    
      if (buttonName.indexOf('edit') >= 0) {
        //confirm("some text") logic...
      }
    
      event.preventDefault();
    });
    

    此文档也可能有帮助:http://api.jquery.com/submit/

    【讨论】:

    • 感谢您的回答。但我不明白如何用你写的东西做我想做的事。我有各种按钮的形式。在表单 onsubmit 我调用我的函数,我想知道以“名称”开头的按钮是否被点击。
    • 表单是否通过“名称”按钮提交?还是可以通过“姓名”和其他方式提交?问题中的示例代码 sn-p 可能会帮助我们引导您找到更合适的答案。
    • 表单是通过“名称”等按钮提交的。详细地说,在表单中,我有许多名称以“编辑”开头的编辑按钮、名称以“删除”开头的删除按钮和 1 个添加按钮。都是提交按钮。提交表单我调用javascript函数,如果按钮是编辑确认(“某些文本”),我想要在其中提交表单。
    【解决方案2】:
    function MyOnSubmit(e){
       e = e || window.event;
       // srcElement for IE, target for w3c
       var target = e.target || e.srcElement;
       if (target.id.indexOf("edit") > -1){
         // an edit button fired the submit event
       }
    }
    

    虽然我建议您进一步研究以找到处理编辑和删除按钮的更好方法(例如将它们与 href=editpage.jsp?id=23 链接)

    【讨论】:

    • 感谢您的回答。你能解释一下这个函数中的 e 是什么吗?
    • e 为事件对象,e || window.event 是为了确保它的浏览器兼容,有些浏览器在处理程序中发送事件对象,有些在窗口对象中填充事件......有些浏览器定义“目标”有些定义“srcElement”,你必须阅读多一点关于 DOM 中的事件对象(建议你从 IE 模型开始,因为这里有更好的记录:msdn.microsoft.com/en-us/library/ms535863(v=VS.85).aspx
    【解决方案3】:

    我很确定您只是自己回答了这个问题...

    每个都以“编辑”开头,并以唯一的 ID 结尾? 所以... $(button).attr("id") 会给你那个。将其存储在变量中?不知道你想做什么..

    【讨论】:

    • 不用 jquery 能做到吗?
    • 为什么不用 jquery 做任何事?当然你可以在没有jquery的情况下做到这一点。使用onclick调用一个函数并将其传递给它的ID或传递它本身(this)。以您通常在函数中的方式访问它。只是那个 jquery 更好。
    • 好的,不管是否使用jquery。我重写了我的需求,你能帮帮我吗?
    【解决方案4】:

    在所有按钮上绑定点击事件:

    for (var i = 0; i < buttons.length; i++) {
        var button = buttons[i];
        if (button.addEventListener) {
            button.addEventListener('click', handler, false);
        }
        else {
            button.attachEvent('onclick', handler);
        }
    }
    

    在您的事件处理程序中,获取 Event 对象,然后获取目标:

    function handler(e) {
        e = e || window.event;
        // srcElement for IE, target for w3c
        var target = e.target || e.srcElement;
        var id = target.name.substring(4);
        /* your code rely on id */
    }
    

    【讨论】:

    • 我不能更简单吗?如果单击了以“edit”开头的按钮名称,我只想让我的一些 javascipt 函数返回 true。
    • 你模棱两可的Aram,先清除一些东西,你的函数应该返回“true”,它什么时候被调用?加载页面?在一些链接点击?还是在按钮上单击本身?
    • @Ayyash:没有我的函数以 onsubmit 形式调用。我在每个许多编辑、删除按钮和一个添加中都有表单。我想知道我的一个编辑按钮是否被点击。
    • 那么 otakustay 给了你部分答案,你的解决方案在于“event”对象,你的函数应该检测“event.target”或“event.srcElement”(不同的浏览器看到的不同”,并且然后检查 [event.srcElement.id.indexOf("edit") > -1] 如果条件为真,则单击的按钮是编辑按钮
    • 如果您想知道在服务器端点击了哪个按钮,只需为每个按钮关联一个唯一值,然后获取提交的值,如request.getParameter("xxx")
    【解决方案5】:

    我认为您可能没有正确表达您的问题。如果您使用的是 jquery,定位按钮就像$('#id') 一样简单,如果您想在该按钮上存储任何信息,您可以添加属性或使用jquery.data 函数。

    $('#id').attr("pressed", "true");
    

    或者

    $('#id').data('pressed', 'true');
    

    【讨论】:

    • 我不使用 jquery 并且哪个是 id 并不重要。我只希望如果单击名称以“编辑”开头的按钮而不是我的函数返回 true。
    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多