如何让 HTML 按钮的 onclick 事件随机触发两个不同功能之一?

Posted

技术标签:

【中文标题】如何让 HTML 按钮的 onclick 事件随机触发两个不同功能之一?【英文标题】:How do I make an HTML button’s onclick event trigger one of two different functions at random? 【发布时间】:2011-03-20 11:35:03 【问题描述】:

如何让 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'   id="button"   />

【问题讨论】:

如果您想要切换功能获取文本并根据该调用特定功能。 How to use both onclick and ondblclick on an element? 的可能重复项 @Gert G:这与 OP 的问题无关。 这实际上是你的代码吗?因为这不会在我见过的任何网络浏览器中产生按钮。您的 HTML 标记不会有名称。您能在浏览器中查看源代码并从那里向我们展示代码吗? 【参考方案1】:

正如 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]();
    
);

【讨论】:

如果你要处理数组,那么也许你应该使用Math.round(Math.random() * functions.length) @sje397:哦,是的,那会更好。我认为您需要 Math.floor 而不是 Math.round (请参阅下面的 jAndy 回答)。我更喜欢你的方法,因为它更简单。【参考方案2】:

假设你有这样的代码:

$('#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
  
);

【讨论】:

【参考方案3】:

附加一个事件处理程序,并让该单个处理程序随机决定要做什么。

例如,在 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 调用一个函数,然后它会计算出要做什么。

【讨论】:

嗯你有我可以探索的例子吗?编辑:好的,刚刚看到它。 PHP 有什么用? @JEagle:哪一点给你带来了困难?你知道如何生成随机数吗?你知道如何从另一个函数调用一个函数吗? @乔恩·斯基特。我有 2 onclick 独立工作。我担心的是如何将它们添加到同一个按钮。 @JEagle:仔细阅读 Jon 的回答:附加 一个 事件处理程序,并制作 那个单一的处理程序 决定做什么随机 . @jAndy:当我回答这个问题时,没有任何迹象表明涉及到什么平台。但是,我留下了添加标签后的答案,因为无论平台如何,方法都是相同的。【参考方案4】:
$('button').bind('click', function()
    var rnd = Math.floor(Math.random() * 2);
    if(rnd)
       AnswerForEverthing();
    else
       WhatAmountOfWoodWouldAWouldchuckChuck();
);

【讨论】:

我在这里狡辩(可能只是误解了代码,现在还为时过早),但那不是在 25% 的时间里调用 AnswerForEverthing,在 75% 的时间里调用 WhatAmountOfWoodWouldAWouldchuckChuck 吗?换句话说,它并不像它可能的那样随机。 @Paul D. Waite:不,如果将Math.random() 的结果乘以3,就会发生这种情况。 @jAndy:啊!是的,对不起,Math.floor,明白了。 一直在尝试几个代码示例,但是当我删除 onclick 并替换为 id="button" 我不能让它工作了...... @jAndy,好的。现在我怎样才能使它与这条线一起工作: " rel="nofollow" border='0' align='center' /> 。我试图把 id="button" 放在那里,但它不起作用......【参考方案5】:
function randomFunction() 
    var args = arguments;
    return function() 
        args[Math.floor(Math.random()*args.length)]();
    ;


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

尚未测试,希望它有效。工作原理:randomFunction 返回一个函数,该函数本身随机调用 randomFunction 的一个参数。

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

【讨论】:

以上是关于如何让 HTML 按钮的 onclick 事件随机触发两个不同功能之一?的主要内容,如果未能解决你的问题,请参考以下文章

如何让一个按钮自动触发,自动执行onclick鼠标单击事件. 默认已点击.

js如何自动点击onclick

如何让 React 中的 onClick 处理具有多个兄弟姐妹的单个元素?

HTML中如何让窗口在点击按钮关闭该窗口?

JavaScript学习-事件响应,让网页交互

js如何使onclick事件无效