2009-05-21 49 views
2

如何更改点击表单按钮时将执行的JavaScript?更改HTML按钮的onclick事件委托?

我试图改变其onClicked及其onclicked子属性,像这样:

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

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

既不似乎工作。我的其他选项有:

  1. 要有两个按钮并隐藏一个并显示另一个。
  2. 让它定向到一个函数,该函数会将字符串转义并将字符串更改为我想要执行的函数。

既不显得非常优雅。

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

回答

2

原型,我相信,这将是这样的:

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

编辑:或者,当它在the documentation说,你可以简单地指定要在点击调用该函数:

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

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

但是这又是一次,原型特定。

+4

这项工作,但它不会删除在html中设置的onclick属性...这是不好的... – 2009-05-21 15:24:15

+0

你c也停止观察http://www.prototypejs.org/api/event/stopObserving – 2009-05-21 15:35:59

1

在javascript中设置onclick处理程序的一般方法是将onclick设置为一个函数,方法是直接将函数的名称传递给函数,而不是将其设置为字符串。所以,如果myButton设置为一个DOM元素,你可以这样写:

myButton.onclick = doSomething; 

所以,当你点击“myButton的按钮,该功能doSomething将被称为doSomething()。对于匿名函数,你可以这样写:

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

jQuery中这是

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


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

或者,如果你想要把函数内联:

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

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

0

最后我用原型,它是这样的:

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

顺便说一句,你的例子可能已经即便你没有引用函数名工作。编辑:是的,Element.observe(element,eventName,handler)和someElement.observe(eventName,handler)也可以工作。并且不要引用处理程序名称 - 您想要传递函数而不是字符串!

2

使用原型框架,你可以这样做:

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

或:

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

或:

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

或:

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

我发现您的问题与原型Firefox的下一个解决方案:

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

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

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