如何在iPhone上没有jQuery的情况下获取originalEvent

时间:2010-10-04 06:04:38

标签: javascript jquery iphone events

出于某种原因,我无法使用jQuery。

这是我的代码:

document.addEventListener("touchstart", function(e) {
    e.preventDefault();

    var orig = e.originalEvent;

    var x = orig.changedTouches[0].pageX;
    var y = orig.changedTouches[0].pageY;

    //id("#draggable").css({top: y, left: x});
    id("draggable").style.left = x;
    id("draggable").style.top = y;

});

使用jQuery,您可以获得originalEvent,但如果您不使用它,如何获取它?

由于

4 个答案:

答案 0 :(得分:11)

jQuery传递给事件监听器函数的事件对象是jQuery自己创建的。其originalEvent属性是浏览器创建的实际Event对象,因此如果您附加没有jQuery的事件侦听器,则传递给侦听器的事件对象与{{1}完全相同jQuery事件对象的属性。因此,在您的示例中,如果您使用jQuery,originalEvent正是e指向的内容。

答案 1 :(得分:1)

我为您的问题提供了一个简单的解决方案。我在按钮中添加了一个全局变量“hovered”和mouseover,mouseout事件。当鼠标悬停按钮时,变量“hovered”设置为true,如果鼠标悬停在按钮上,则设置为false。 此机制允许您在onchange事件触发时确定鼠标是否在按钮上。因此,如果在onchange事件被触发时鼠标悬停在按钮上,那么我们就知道用户点击了按钮并触发了onchange。

当然,这是一个快速而肮脏的解决方案,只是为了给你一个想法。它可以做得更好。 希望它有所帮助:)

var hovered = false;

$('#button').mouseover(function(){
    hovered = true;   
}).mouseleave(function(){
    hovered = false;
});

$(function(){
    $('#button').bind("click",function(){
          alert("button click");
      });
$('#textbox').bind("change",function(){

    alert("text changed");
    if (hovered)
        $('#button').trigger('click');                
});

});​

答案 2 :(得分:0)

var x = e.pageX;

如果桌面上有Safari,请在iPhone模式下打开它Develop-> User Agent-> Mobile Safari...
并在函数内部放置一个断点,您可以检查e对象及其所有属性。

答案 3 :(得分:0)

我认为您正在使用changedTouches,即a list of Touches for every point of contact which contributed to the event。多点触控就是这种情况发生的一个例子。对于touchstart,您可能只想查看触摸a list of Touches for every point of contact currently touching the surface

var origTarget = e.originalEvent.touches[0].target
var x = e.originalEvent.touches[0].pageX
var y = e.originalEvent.touches[0].pageY