我做了这个片段,所以你可以知道我的真正问题是什么:
$('#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
传递。
有人知道任何伎俩,还是有任何想法?提前谢谢。
答案 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);