Javascript 更改HTML按钮的onclick事件委托?

Javascript 更改HTML按钮的onclick事件委托?,javascript,prototypejs,Javascript,Prototypejs,如何更改单击表单按钮时将执行的JavaScript 我尝试更改其onClicked和onClicked子属性,如下所示: $('mybutton').onClick = 'doSomething'; 及 两者似乎都不起作用。我的其他选择是: 有两个按钮,隐藏一个,显示另一个 将它定向到一个函数,该函数求值字符串并将字符串更改为我要执行的函数 两个看起来都不太优雅 我使用Prototype作为js库,这样它就有了我可以使用的任何有用的工具。对于Prototype,我相信它会是这样的: $("my

如何更改单击表单按钮时将执行的JavaScript

我尝试更改其onClicked和onClicked子属性,如下所示:

$('mybutton').onClick = 'doSomething';

两者似乎都不起作用。我的其他选择是:

  • 有两个按钮,隐藏一个,显示另一个
  • 将它定向到一个函数,该函数求值字符串并将字符串更改为我要执行的函数 两个看起来都不太优雅


    我使用Prototype作为js库,这样它就有了我可以使用的任何有用的工具。

    对于Prototype,我相信它会是这样的:

    $("mybutton").observe('click', function() {
         // do something here
    });
    
    Event.observe('mybutton', 'click', doSomething);
    
    编辑:或者,如中所述,您可以简单地指定要在单击时调用的函数:

    $('mybutton').observe('click', respondToClick);
    
    function respondToClick(event) {
        // do something here
    }
    

    但是,这些都是特定于原型的。

    在javascript中设置onclick处理程序的一般方法是将
    onclick
    直接传递给函数,而不是字符串。因此,如果
    myButton
    设置为DOM元素,您将编写:

    myButton.onclick = doSomething;
    
    因此,当您单击“mybutton”按钮时,
    doSomething
    函数将被称为
    doSomething()
    。对于匿名函数,您可以编写:

    myButton.onclick = function() {
        alert("myButton was clicked!");
    };
    
    在JQuery中,它是

    $("#myButtonId").click(myFunction);
    
    
    function myFunction(){
     alert("Clicked");
    }
    
    或者,如果要将函数内联:

    $("#myButtonId").click(function(){
         alert("Clicked");
    });
    

    如果您使用JQuery,首先确保使用相关的选择器前缀(即:如果您使用元素的Id,请在其前面加一个#)。其次是click方法,它将回调分配给click事件。

    上次我使用Prototype时,它是这样的:

    $("mybutton").observe('click', function() {
         // do something here
    });
    
    Event.observe('mybutton', 'click', doSomething);
    
    顺便说一句,如果您没有引用函数名,您的示例甚至可能有效


    编辑:是,Element.observe(Element,eventName,handler)和someElement.observe(eventName,handler)也可以工作。并且不要引用处理程序名称-您希望传递函数而不是字符串

    使用原型框架,您可以:

    Event.observe("mybutton", "click", clickHandler);
    
    或:

    或:

    或:


    我在firefox下找到了原型解决方案:

    $("#myButtonId").writeAttribute('onclick', ''); // first remove the attribute
    $("#myButtonId").observe('click', function () { ... }); // then add the event
    

    如果原始onclick事件是通过HTML属性设置的,则可以使用以下方法覆盖它:

    $("#myButtonId").setAttribute("onclick", "myFunction();");
    

    这是可行的,但是它不会删除html中设置的onclick属性。。。这很糟糕……你完全正确。当我回答这个问题时,我没有想到这一点。不过我没有使用JQuery。下一次我可能会这样做,这样可能会有用。
    $("#myButtonId").writeAttribute('onclick', ''); // first remove the attribute
    $("#myButtonId").observe('click', function () { ... }); // then add the event
    
    $("#myButtonId").setAttribute("onclick", "myFunction();");