有没有办法像在 jQuery 中那样将有效负载添加到 vanilla JavaScript 事件?
// jQuery
$(document).trigger('event', payload);
// Vanilla JS
window.dispatchEvent(new Event('event', ???
Run Code Online (Sandbox Code Playgroud)
我想我必须使用我自己的某种事件总线?
我不知道这是否是我正在使用的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事件继续传播,使用YUI.以下是一些最小的HTML和一些最小的JavaScript,它们演示了这个问题:
HTML:
<a href="#foo" onClick="fooClickTest()" id="foo">foo</a>
<a href="#bar" id="bar">bar</a>
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事件的理解是否搞砸了?我如何实现目标?
我有一个onclick事件附加到我的页面中的某个区域,当用户点击它时(当然)会触发某个操作.我最近在该地区添加了一张图片.当用户点击该图像时,我希望发生另一个操作,并且我不希望发生与整个区域相关联的操作.但是,我发现这两个事件实际上都是在单击图像时触发的.如何在单击图像时抑制区域范围的操作?
有没有办法确定文档中哪个元素当前具有焦点?理想情况下,无需走过任何元素.
是否有可能获得对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) 我有以下代码:
$('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淡出,默默地移动,并且淡入以获得无缝效果.
但是,运行此操作时,每次移动鼠标时,都会运行上述所有操作.它提出了一个问题,因为这不是我想要发生的事情(我希望它发生一次,就是这样),我猜它会减慢浏览器的速度,可能会导致堆叠.
我想我曾经在某处读过如果一旦执行一次就停止执行某些事情,但是我记不住了,所以有没有办法做到这一点?谢谢.
我有以下代码,在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代码来捕捉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代码,但我无法弄清楚哪个事件要陷阱(假设一个存在)会给我行为我在找. onFocus发生得太快 - 如果用户选择字段但不更改任何文本,我不希望发生任何事情.但onChange为时已晚 - 我希望用户在开始输入时立即触发Javascript,而不是在用户完成输入并点击其他内容时.我怎么能做到这一点?