2009-05-21 4 views
2

Как изменить JavaScript, который будет выполняться при нажатии кнопки формы?Изменение делегата события onclick кнопки HTML?

Я попытался изменить его onClicked и его onclicked ребенка атрибуты, как так:

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

и

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

Ни похоже на работу. Мои другие варианты:

  1. Чтобы иметь две кнопки и скрыть одну и показать другую.
  2. Чтобы он был направлен на функцию, которая оценивает строку и меняет строку на функцию, которую я хочу выполнить.

Ничего особенного.

Я использую Prototype как библиотеку js, поэтому у меня есть какие-либо полезные инструменты, которые я могу использовать.

ответ

2

Для прототипа, я считаю, что это будет что-то вроде этого:

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

EDIT: Или, как говорится в the documentation, вы можете просто указать функцию, которую вы хотите позвонить по щелчку:

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

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

Но это все, опять же, прототип.

+4

Это работает, однако это не снимает OnClick свойство, которое устанавливается в HTML ... что плохо ... –

+0

вы с а также прекратить наблюдение http://www.prototypejs.org/api/event/stopObserving –

+0

Вы абсолютно правы. Я не думал об этом, когда отвечал на этот вопрос. – montrealist

1

Общий способ установки обработчика onclick в javascript - установить 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: если ваш идентификатор элемента положил перед ним #). Во-вторых, метод щелчка назначает обратный вызов событию клика.

+0

Я не использую JQuery. В следующий раз я мог бы это сделать. –

0

Последний я использовал прототип, это было что-то вроде этого:

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

Кстати, ваши примеры, возможно, уже даже работал, если вы не экранирует имена функций.

EDIT: Да, Element.observe (элемент, eventName, обработчик) и 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

Я нашел решение для вашей проблемы с прототипом под светлячок:

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

Если исходное OnClick событие было установлено с помощью атрибутов HTML, вы можете использовать следующие перезаписать это:

$("#myButtonId").setAttribute("onclick", "myFunction();"); 
Смежные вопросы