0

很难用人类语言解释,只显示代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang='zh-CN' xml:lang='zh-CN' xmlns='http://www.w3.org/1999/xhtml'>
<head>
    <script type="text/javascript">
        function call_f1(){
            document.getElementById('f1_div').click();

            // document.getElementById('f1_div').click();
        }

        function f1(){
            console.log('f1 '+new Date());               
            document.getElementById('btn_1').click();                
        }

    </script>
</head>
<body>
    <input id="btn_1" type="button" onclick="call_f1()" value="callf1"></input>
    <div id="f1_div"  onclick="f1()" style="background: red; width: 35px; height: 35px;">
    </div>
</body>

当您使用鼠标单击按钮时,您会在控制台上获得单个输出。为什么??函数不会f1重复调用吗?

4

3 回答 3

2

http://www.w3.org/TR/html5/dom.html#run-synthetic-click-activation-steps 因此,在两个函数调用中添加超时。如下。

    var timeout = 0; // change this to whatever suites for you
    function call_f1(){
        setTimeout(function(){
            document.getElementById('f1_div').click();
        }, timeout);

        // document.getElementById('f1_div').click();
    }

    function f1(){
        console.log('f1 '+new Date());               
        setTimeout(function() {
            document.getElementById('btn_1').click();
        }, timeout);                
    }
于 2013-10-18T13:18:05.127 回答
1

尝试:

   function call_f1(){
        document.getElementById('f1_div').onclick();

        // document.getElementById('f1_div').onclick();
    }

    function f1(){
        console.log('f1 '+new Date());               
        document.getElementById('btn_1').onclick();                
    }

这个对我有用:http: //jsfiddle.net/djhell/rG782/

于 2013-10-18T12:52:21.617 回答
1

为什么??函数不会f1重复调用吗?

不,当元素已经存在活动事件时,它开始.click()合成点击激活不会做任何事情。'click'

  1. 如果元素的正在单击标志设置为 true,则中止这些步骤

  2. 将元素上的click in progress标志设置为 true。

如果您希望它与 连续.click(),则必须允许上一个事件首先完成。可能使用计时器:

function f1(){
    console.log('f1 '+new Date());

    setTimeout(function () {
        document.getElementById('btn_1').click();
    }, 1);
}
于 2013-10-18T13:06:54.610 回答