标签: javascript-events

将有效负载添加到 vanilla JavaScript 事件

有没有办法像在 jQuery 中那样将有效负载添加到 vanilla JavaScript 事件?

// jQuery
$(document).trigger('event', payload);

// Vanilla JS
window.dispatchEvent(new Event('event', ???
Run Code Online (Sandbox Code Playgroud)

我想我必须使用我自己的某种事件总线?

javascript jquery javascript-events

2
推荐指数
1
解决办法
3224
查看次数

Javascript"onMouseOver"触发儿童?

我不知道这是否是我正在使用的jQuery的结果,但这是我正在尝试做的事情:

<div class="info" style="display: inline;" 
  onMouseOut="$(this).children('div').hide('normal');" 
  onMouseOver="$(this).children('div').show('normal');"
>
  <img src="images/target.png">
  <div class="tooltiptwo" id="tooltip" 
    style="font-weight: normal; font-size: 0.8em;" >TOOLTIP TEXT</div>
</div>
Run Code Online (Sandbox Code Playgroud)

对于熟悉基本CSS和jQuery的人,我试图在我的工具提示中添加一个简单的动画.问题是触发这样的动画.似乎当动画发生时,如果用户将鼠标移到工具提示上,动画将进入显示和隐藏的循环,直到用户将鼠标移开.这是一种不受欢迎的效果,因为当鼠标离开父 div 时,我希望动画只消失一次.我已经定位了我的CSS,以便工具提示远离父div显示,但无论操作应该只触发父节点,而不是任何子节点.

所以基本上,我将如何实现这一目标?我希望我的父元素上的hover/out状态触发父节点的子节点上的函数(动画),而不会让孩子的hover/out状态做任何事情.似乎onMouseOver和onMouseOut的常规方法即使对于该方法所属的父节点的子节点也会触发,这会导致一些相当不理想的效果.

请注意,我是jQuery的新手(虽然它到目前为止令人惊叹,但如果可以的话,我希望能够在我的网站上打好它)并且如果有更好的方法来使用jQuery实现悬停/退出状态我可能不知道关于他们.^ _ ^

谢谢

javascript jquery parent-child javascript-events

1
推荐指数
1
解决办法
8680
查看次数

YUI stopEvent无效

我试图阻止JavaScript事件继续传播,使用YUI.以下是一些最小的HTML和一些最小的JavaScript,它们演示了这个问题:

HTML:

<a href="#foo" onClick="fooClickTest()" id="foo">foo</a>&nbsp;
<a href="#bar" id="bar">bar</a>&nbsp;
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

function fooClickTest(e) {
    alert('fooClickTest');
    YAHOO.util.Event.addListener('bar', 'click', barClickTest1);
    YAHOO.util.Event.addListener('bar', 'click', barClickTest2);
    YAHOO.util.Event.addListener('bar', 'click', barClickTest3);
    YAHOO.util.Event.preventDefault(e);
}

function barClickTest1(e) {
    alert('barClickTest1');
    YAHOO.util.Event.preventDefault(e);
}

function barClickTest2(e) {
    alert('barClickTest2');
    YAHOO.util.Event.preventDefault(e);
    YAHOO.util.Event.stopEvent(e);
// Also tried:
//  YAHOO.util.Event.stopPropagation(e);
// and:
//        if (e.stopPropagation) {
//            e.stopPropagation();
//        } else {
//            e.cancelBubble = true;
//        }
}
Run Code Online (Sandbox Code Playgroud)

我期望发生的是用户可以点击"foo"添加三个点击处理程序,然后点击"bar".然后,用户将看到两个警报,'barClickTest1'和'barClickTest2'.而是发生所有三个警报.YAHOO.util.Event.stopEvent(e)没有达到我的预期,即阻止事件传播到barClickTest3.

我已经在Firefox 3.0.7和Safari 3.2.1中测试了我的代码.如您所见,我也尝试过YAHOO.util.Event.stopPropagation(e)和e.stopPropagation().他们都没有成功.

这显然是一个人为的例子,尽管它确实证明了这个问题.在真正的解决方案中,如果满足某些条件,我将仅阻止事件传播.

我对JavaScript事件的理解是否搞砸了?我如何实现目标?

javascript yui javascript-events

1
推荐指数
1
解决办法
3510
查看次数

Javascript:从单个操作触发的多个事件

我有一个onclick事件附加到我的页面中的某个区域,当用户点击它时(当然)会触发某个操作.我最近在该地区添加了一张图片.当用户点击该图像时,我希望发生另一个操作,并且我不希望发生与整个区域相关联的操作.但是,我发现这两个事件实际上都是在单击图像时触发的.如何在单击图像时抑制区域范围的操作?

javascript javascript-events

1
推荐指数
1
解决办法
3700
查看次数

确定哪个元素具有焦点

可能重复:
如何确定哪个html页面元素具有焦点?
如何找出哪个Javascript元素有焦点?

有没有办法确定文档中哪个元素当前具有焦点?理想情况下,无需走过任何元素.

javascript javascript-events

1
推荐指数
1
解决办法
5339
查看次数

ASP.NET MVC - 在onSuccess函数中获取对'triggerElement'的引用?

是否有可能获得对onSuccess函数中调用Ajax请求的triggerElement的引用?

<%=Ajax.ActionLink("x", a, r, New AjaxOptions With {.OnSuccess = _
         "function(context) {alert('get triggerElement reference here?');}" })%>
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc javascript-events

1
推荐指数
1
解决办法
2132
查看次数

阻止事件触发后触发一次

我有以下代码:

$('body').mousemove(function() {
    $('#covering').fadeOut(500);
    $('.block div div').fadeOut(250)
    $('.block div div').css('margin-top','160px')
    $('.block div div').fadeIn(250);
});
Run Code Online (Sandbox Code Playgroud)

基本上我要做的是有一个"覆盖"div淡出(如在这个问题中)并且有一些块元素的内部div淡出,默默地移动,并且淡入以获得无缝效果.

但是,运行此操作时,每次移动鼠标时,都会运行上述所有操作.它提出了一个问题,因为这不是我想要发生的事情(我希望它发生一次,就是这样),我猜它会减慢浏览器的速度,可能会导致堆叠.

我想我曾经在某处读过如果一旦执行一次就停止执行某些事情,但是我记不住了,所以有没有办法做到这一点?谢谢.

javascript jquery javascript-events

1
推荐指数
1
解决办法
235
查看次数

Javascript无法在FF上工作

我有以下代码,在IE中为textarea元素工作完美.

(编辑:为了可读性而包装)

<textarea name="mem_message" cols="25" rows="5"
  onkeypress="return taLimit(this)" 
  onkeyup="return taCount(this,'myCounter')">
    <? echo $_SESSION['mem_message']; ?>
</textarea>
Run Code Online (Sandbox Code Playgroud)

它调用验证函数:

<script language="Javascript"><!--Counter for Message Box -->

maxL=100;
var bName = navigator.appName;
function taLimit(taObj) {
    if (taObj.value.length==maxL) return false;
    return true;
}

function taCount(taObj,Cnt) { 
    objCnt=createObject(Cnt);
    objVal=taObj.value;
    if (objVal.length>maxL) objVal=objVal.substring(0,maxL);
    if (objCnt) {
        if(bName == "Netscape"){    
            objCnt.textContent=maxL-objVal.length;}
        else{objCnt.innerText=maxL-objVal.length;}
    }
    return true;
}
function createObject(objId) {
    if (document.getElementById) return document.getElementById(objId);
    else if (document.layers) return eval("document." + objId);
    else if (document.all) return eval("document.all." + objId);
    else return …
Run Code Online (Sandbox Code Playgroud)

javascript ajax firefox javascript-events

1
推荐指数
1
解决办法
573
查看次数

在Safari 4中禁用F5键

我已经编写了以下javascript代码来捕捉F5键按下并阻止用户刷新:(
我知道这不是一个好主意,但无论是否有人喜欢它我都坚持这个.我问的问题也与为什么有关下面的脚本不适用于safari 4,但适用于其他浏览器.)

var fn = function (e)
{

    if (!e)
        var e = window.event;

    var keycode = e.keyCode;
    if (e.which)
        keycode = e.which;

    var src = e.srcElement;
    if (e.target)
        src = e.target;    

    // 116 = F5
    if (116 == keycode)
    {
        // Firefox and other non IE browsers
        if (e.preventDefault)
        {
            e.preventDefault();
            e.stopPropagation();
        }
        // Internet Explorer
        else if (e.keyCode)
        {
            e.keyCode = 0;
            e.returnValue = false;
            e.cancelBubble = true;
        }

        return false;
    }
}

// Assign function to …
Run Code Online (Sandbox Code Playgroud)

javascript safari javascript-events

1
推荐指数
3
解决办法
5091
查看次数

onFocus和onChange之间的Javascript事件

我正在编写一个网页,当用户在给定的输入字段中更改文本时,我想运行一些Javascript代码,但我无法弄清楚哪个事件要陷阱(假设一个存在)会给我行为我在找. onFocus发生得太快 - 如果用户选择字段但不更改任何文本,我不希望发生任何事情.但onChange为时已晚 - 我希望用户在开始输入时立即触发Javascript,而不是在用户完成输入并点击其他内容时.我怎么能做到这一点?

javascript javascript-events

1
推荐指数
2
解决办法
2501
查看次数