2

如何通过 getter 获取此事件从另一个 Javascript 函数调用 Javascript 事件?

一些示例代码如下:

<script type="text/javascript">
    function keyDownHandler(elem, e)
    {
       var keyId = e.keyCode;
       if(keyId === 13)
       {
          var clickMethod = elem.onclick;
          //now call the clickHandler method.
       }
    }
    </script>
    
    
    <input type="text" onkeydown="keyDownHandler(this, event)"
           onclick="clickHandler(this)" />

我想调用onclick输入字段属性中定义的方法。

4

4 回答 4

4

正如 Tim S. 所说,你可以直接调用处理程序,但是如果你真的想调用事件,你可以使用 Jquery 'trigger'。

$(elem).trigger('click')

如果 elem 不是 jquery 对象。

编辑: jquery 不是必需的。代码应该通过在 onclick 调用中添加括号来工作。

function keyDownHandler(elem, e) {
            var keyId = e.keyCode;
            if (keyId === 13) {
                elem.onclick();
            }
        }

必须定义 clickHandler。

于 2013-01-22T11:57:57.397 回答
1

我不建议这样做。

您需要将共享登录onclick作为单独的方法从处理程序中抽象出来,然后从两个事件处理程序中调用该方法。

function sharedloginc(some arguments...) {
    //do something
}

function keyDownHandler(el, e) {
    //do something
    sharedloginc(....)   
}

function clickHandler(el, e){
    sharedloginc(....)
}
于 2013-01-22T11:56:47.033 回答
0

为什么不使用

<script type="text/javascript">
function keyDownHandler(elem, e)
{
    var keyId = e.keyCode;

    if(keyId === 13)
    {
        // call function, normally
        clickHandler(elem, null);
    }
}
</script>

我已经设置了event参数null,因为,好吧,你不能生成一个(正确的!)事件对象。


好的,经过一番玩耍后,我设法做到了:

<script type="text/javascript">
function keydown_handler(el, e) {
    var click, code = e.keyCode;

    if(code === 13) {
        var handler = el.onclick;

        if(typeof handler === 'function') {
            handler.apply(this, el, null);
        }
    }
}

function click_handler(el, e) {
    alert('clicked!');
}
</script>

<input type="text" onkeydown="keydown_handler(this, event);" onclick="click_handler(this, event);" />

它似乎有效,但目前我无法验证它是否适用于所有浏览器。

于 2013-01-22T11:53:59.387 回答
0

这个例子将解决你的问题。

<html>
<head>
<title>Testing</title>
</head>
<body>
             <script type="text/javascript">
                 function keyDownHandler(elem, e)
                   {
                       var keyId = e.keyCode;
                       if(keyId == 13)
                       {
                         // var clickMethod = elem.onclick;
                          clickHandler(elem, e);
                        }
                   }
                  function clickHandler(elem, e)
                  {
                    alert("clickHandler");
                  }
           </script>
       <input type="text" onkeydown="keyDownHandler(this, event)" onclick="clickHandler(this, event)" />
</body>
</html>
于 2013-01-22T11:57:59.933 回答