Php 如何制作HTML按钮’;s onclick事件随机触发两个不同函数中的一个?

Php 如何制作HTML按钮’;s onclick事件随机触发两个不同函数中的一个?,php,jquery,html,button,random,Php,Jquery,Html,Button,Random,如何使HTML按钮的onclick事件随机触发两个不同函数之一 我在服务器上使用PHP,在客户端使用jQuery。 使用此代码时,我点击按钮图像什么都没有发生 function a(){ alert('A got called!'); } function b(){ alert('B got called!'); } $('#button').bind('click', function(){ var rnd = Math.floor(Math.r

如何使HTML按钮的
onclick
事件随机触发两个不同函数之一

我在服务器上使用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"   />
附加一个事件处理程序,并让单个处理程序决定随机执行的操作

例如,在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中的细节可能会有所不同,但基本上您仍然需要调用一个函数,然后确定要做什么。

假设您有如下代码:

$('button').bind('click', function(){
    var rnd = Math.floor(Math.random() * 2);
    if(rnd)
       AnswerForEverthing();
    else
       WhatAmountOfWoodWouldAWouldchuckChuck();
});
$('#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
  }
});
$(“#按钮”)。单击(函数(){
if(Math.random()<0.5){
//处理程序1代码
}否则{
//处理程序2代码
}
});

正如Jon所说,将一个函数附加到按钮的
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]();
    }
);
还没测试过,希望能用。工作原理:
randomFunction
返回一个函数,该函数本身随机调用
randomFunction
的一个参数


显然,只有当您有多个事件时,这种方法才有意义,因为您需要一个随机函数来响应它们。如果只是这一个事件,那么使用上面的一个版本会更简单。

如果您想要切换功能,请获取文本并根据该调用特定的函数。@Gert G的可能重复:这与OP的问题无关。这实际上是您的代码吗?因为这在我见过的任何网络浏览器中都不会产生按钮。您的HTML标记没有名称。你能在浏览器中查看源代码并向我们展示其中的代码吗?嗯,你有我可以探究的示例吗?编辑:好的,我刚刚看到了。关于PHP的一些东西?@JEagle:哪一点给你带来了困难?你知道如何生成一个随机数吗?你知道如何从一个函数调用另一个函数吗?@jonskeet。我有两个onclick独立工作。我担心的是如何将它们添加到同一个按钮。@JEagle:仔细阅读Jon的回答:附加一个事件处理程序,并让单个处理程序随机决定要做什么。@jAndy:当我回答问题时,没有任何迹象表明涉及到什么平台。然而,我保留了添加标签后的答案,因为无论平台如何,方法都是一样的。我在这里提出质疑(可能只是误解了代码,现在还早),但在25%的时间里,调用
回答
,和
WhatamountofWoodwouldChuck
75%的时间?换句话说,它并不像可能的那么随机。@Paul D.Waite:不,如果将
Math.random()
的结果乘以
3
@jAndy:Ah,就会发生这种行为!是的,对不起,Math.floor,明白了。我一直在尝试几个代码示例,但当我删除onclick并改为使用id=“button”时,我无法让它继续工作…@jAndy,好的,它可以工作了。现在我该如何使用这一行:“rel=”nofollow“border='0'align='center'alt=“FREE”/>。我试图将id=“button”放在那里,但它不起作用……如果您要处理数组,那么可能应该使用
Math.round(Math.random()*functions.length)
@sje397:哦,是的,那会更好。我认为你需要Math.floor而不是Math.round(见下面詹迪的答案)。我更喜欢你的方法,因为它更简单。
function randomFunction() {
    var args = arguments;
    return function() {
        args[Math.floor(Math.random()*args.length)]();
    };
}

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