Как сделать так, чтобы событие onclick кнопки HTML запускало одну из двух разных функций случайным образом? - PullRequest
4 голосов
/ 24 июля 2010

Как сделать так, чтобы событие 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 ]

5 голосов
/ 24 июля 2010

Как сказал Джон, присоедините одну функцию к событию 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]();
    }
);
3 голосов
/ 24 июля 2010

Скажем, у вас есть код вроде:

$('#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
  }
});
2 голосов
/ 24 июля 2010

Присоедините один обработчик событий и заставьте этот единственный обработчик решать, что делать случайным образом.

Например, в 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 вызвать единственную функцию, которая затем решит, что делать.

0 голосов
/ 24 июля 2010
function randomFunction() {
    var args = arguments;
    return function() {
        args[Math.floor(Math.random()*args.length)]();
    };
}

$('#id').click(randomFunction(functionOne, functionTwo));

Не проверял, надеюсь, это работает. Как это работает: randomFunction возвращает функцию, которая сама вызывает один из аргументов randomFunction случайным образом.

Этот подход, очевидно, имеет смысл, только если у вас есть несколько событий, и вы хотите, чтобы случайная функция отвечала на них. Если это только одно событие, то проще использовать одну из вышеперечисленных версий.

0 голосов
/ 24 июля 2010
$('button').bind('click', function(){
    var rnd = Math.floor(Math.random() * 2);
    if(rnd)
       AnswerForEverthing();
    else
       WhatAmountOfWoodWouldAWouldchuckChuck();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...