Как сделать так, чтобы событие onclick HTML-кнопки произвольно запускало одну из двух разных функций?
Как сделать так, чтобы событие onclick
HTML-кнопки произвольно запускало одну из двух разных функций?
Я использую PHP на сервере и jQuery на клиенте. Используя этот код, когда я нажимаю на изображение кнопки, ничего не происходит...
function a(){
alert('A got called!');
}
function b(){
alert('B got called!');
}
$('#button').bind('click', function(){
var rnd = Math.floor(Math.random() * 2);
if(rnd)
a();
else
b();
});
.........
< "base_url().'images/free.png';" rel="nofollow" border='0' align='center' alt="FREE" id="button" />
5 answers
$('button').bind('click', function(){
var rnd = Math.floor(Math.random() * 2);
if(rnd)
AnswerForEverthing();
else
WhatAmountOfWoodWouldAWouldchuckChuck();
});
Как сказал Джон, прикрепите одну функцию к событию onclick
кнопки, затем попросите эту функцию вызвать одну из ваших двух функций случайным образом.
В jQuery вы могли бы сделать это так:
function a(){
alert('A got called!');
}
function b(){
alert('B got called!');
}
$('#your_buttons_id_attribute').click(
function(){
var functions = [a,b];
var index_of_function_to_call = Math.round(Math.random());
functions[index_of_function_to_call]();
}
);
Допустим, у вас есть код типа:
$('#button').click(function() {
// handler 1 code
});
$('#button').click(function() {
// handler 2 code
});
Вы бы изменили его на:
$('#button').click(function() {
if(Math.random() < 0.5) {
// handler 1 code
} else {
// handler 2 code
}
});
Прикрепите один обработчик событий и заставьте этот единственный обработчик решать, что делать случайным образом.
Например, в C# вы можете сделать:
private readonly Random rng = new Random();
...
button.Click += TakeRandomAction;
...
private static void TakeRandomAction(object sender, EventArgs e)
{
if (rng.Next(2) == 0)
{
GiveUserPony();
}
else
{
NukePlanetFromOrbit(); // It's the only way to be sure
}
}
Детали могут отличаться в jQuery/JavaScript, но в основном вы все равно заставите onclick
вызвать одну функцию, которая затем определит, что делать.
function randomFunction() {
var args = arguments;
return function() {
args[Math.floor(Math.random()*args.length)]();
};
}
$('#id').click(randomFunction(functionOne, functionTwo));
Не тестировал, надеюсь, это сработает. Как это работает: randomFunction
возвращает функцию, которая сама случайным образом вызывает один из аргументов randomFunction
.
Этот подход, очевидно, имеет смысл только в том случае, если у вас есть несколько событий, и вы хотите, чтобы случайная функция реагировала на них. Если это только одно событие, то проще использовать одну из вышеперечисленных версий.