具有事件的触发元素功能

时间:2016-01-26 18:57:43

标签: javascript jquery

我做了这个片段,所以你可以知道我的真正问题是什么:

$('#test1').on('touchstart mousedown', function(e){
  $('#output').val(e.pageY);
});

$('#test2').on('touchstart mousedown', function(e){
  $('#test1').trigger('touchstart mousedown');
});
button {
  height: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<button id="test1">test1</button>
<button id="test2">test2</button>
<input type="text" id="output">

正如您所看到的,在点击button#test1时,它会正确输出值,但是如果我需要从另一个元素触发其操作(在此代码段中,button#test2)..它不会工作

我认为e -event 未通过$.trigger传递。

有人知道任何伎俩,还是有任何想法?提前谢谢。

一个how to run an exe file with the arguments using python

3 个答案:

答案 0 :(得分:11)

试试这个:

$('#test1').on('touchstart mousedown', function(e){
  $('#output').val(e.pageY);
});

$('#test2').on('touchstart mousedown', function(e){
  $('#test1').trigger(e);
});

答案 1 :(得分:1)

来自jQuery trigger()文档(http://api.jquery.com/trigger/):

  

事件对象始终作为第一个参数传递给事件处理程序。参数数组也可以传递给.trigger()调用,这些参数也将传递给处理程序以及事件对象。从jQuery 1.6.2开始,单个字符串或数字参数可以在不包含在数组中的情况下传递。

对于您的代码,这可能如下所示:

$('#test1').on('touchstart mousedown', function(e, triggerParam){
    $('#output').val(e.pageY || triggerParam);
});

$('#test2').on('touchstart mousedown', function(e){
     $('#test1').trigger('touchstart', e.pageY);
});

但总的来说(我只是提到这个,因为我认为这是更好的做法)来编写一个由听众调用的额外函数。不要让听众处理实际行动。最好让它根据事件委托其他功能。

使用标记的快速示例:

function updateOutput( input ) {
    $("#output").val(input);
}

$('#test1').on('touchstart mousedown', function(e){
    updateOutput(e.pageY);
});

$('#test2').on('touchstart mousedown', function(e){
    updateOutput(e.pageY);
});

通过这种方式,您可以更快,更全面地了解每个监听器和功能实际执行的操作。 希望它有所帮助。

答案 2 :(得分:0)

您想通过触发器传递参数:

var event = jQuery.Event( "touchstart" );
event.pageY = 999;
$('#test1').trigger(event);