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

时间:2009-05-21 14:28:25

标签: javascript prototypejs

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

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

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

$('mybutton').attributes["onclick"] = 'doSomething()';

似乎都没有用。我的其他选择是:

  1. 要有两个按钮并隐藏一个按钮并显示另一个按钮。
  2. 让它定向到一个函数,它会破坏一个字符串并将字符串更改为我想要执行的函数。
  3. 看起来都不优雅。

    我正在使用Prototype作为js库,所以它有任何有用的工具我可以使用它们。

7 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

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

编辑:或者,正如在the documentation中所说的那样,您只需指定要在点击时调用的函数:

$('mybutton').observe('click', respondToClick);

function respondToClick(event) {
    // do something here
}

但这也是原型特有的。

答案 2 :(得分:2)

使用Prototype框架,您可以:

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

或:

Event.observe("mybutton", "click", function() {
  alert("Button clicked!");
});

或:

$("mybutton").observe("click", clickHandler);

或:

$("mybutton").observe("click", function() {
  alert("Button clicked!");
});

答案 3 :(得分:1)

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

myButton.onclick = doSomething;

因此,当您点击“mybutton”按钮时,doSomething功能将被称为doSomething()。对于匿名函数,您可以编写:

myButton.onclick = function() {
    alert("myButton was clicked!");
};

答案 4 :(得分:0)

在JQuery中它是

$("#myButtonId").click(myFunction);


function myFunction(){
 alert("Clicked");
}

或者如果你想把函数放入内联:

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

如果您正在使用JQuery,请首先确保使用相关的选择器前缀(IE:如果您使用元素的ID将#放在它前面)。其次是click方法为click事件分配回调。

答案 5 :(得分:0)

最后我使用了Prototype,它是这样的:

Event.observe('mybutton', 'click', doSomething);

顺便说一下,如果你没有引用函数名,你的例子甚至可能会起作用。

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

答案 6 :(得分:0)

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

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