当我运行以下脚本时,事件总是在页面加载时触发.我不确定我在这里做错了什么,我创建了元素,在DOM中找到它然后附加一个监听器,但它总是在页面加载时触发事件而不是在单击元素时触发.
<script type="text/javascript" language="javascript">
document.write("<div id=\"myDiv\">I am a div</div>");
el = document.getElementById("myDiv");
el.addEventListener("click", alert("clicktrack"), false);
</script>
Run Code Online (Sandbox Code Playgroud) 也许我完全错过了甚至在jQuery中处理的东西,但这是我的问题.
我们假设有一些事件绑定,比如
$(element).bind("mousemove", somefunc);
Run Code Online (Sandbox Code Playgroud)
现在,我想介绍一个新的mousemove绑定,它不会覆盖前一个,但暂时排除(解除绑定)它.换句话说,当我绑定我的函数时,我必须确保没有其他函数将执行该事件,直到我恢复它们.
我正在寻找类似的东西:
$(element).bind("mousemove", somefunc);
// Somefunc is used regularly
var savedBinding = $(element).getCurrentBinding("mousemove");
$(element).unbind("mousemove").bind("mousemove", myfunc);
// Use myfunc instead
$(element).unbind("mousemove", myfunc).bind("mousemove", savedBindings);
Run Code Online (Sandbox Code Playgroud)
当然,somefunc不在我的控制之下,否则这将是无用的:)
我的理解是可以将多个函数绑定到同一个事件,并且无法预先确定这些函数的执行.我知道停止事件传播和立即事件传播,但我认为它们在我的情况下是无用的,因为无法确定执行顺序(但也许我得到这些错误).
我怎样才能做到这一点?在此先感谢~Aki
编辑:我需要强调这一点:我需要先前安装的处理程序(somefunc)不执行.我没有定义该处理程序,它可能是或可能不存在,但它由第三方用户安装.
EDIT2:好的,现在这是不可行的,我想我需要eventListenerList,这在大多数浏览器中都没有实现.http://www.w3.org/TR/2002/WD-DOM-Level-3-Events-20020208/changes.html
我正在编写一些JavaScript,我本来想要做的是确认用户点击他们确实想要点击它的链接.
我的代码目前看起来像这样:
var Anchors = document.getElementsByTagName("a");
for (var i = 0; i < Anchors.length ; i++)
{
Anchors[i].addEventListener("click", function () { return confirm('Are you sure?'); }, false);
}
Run Code Online (Sandbox Code Playgroud)
此代码显示确认框,正如我希望看到的那样,但无论在确认框中按下按钮,都会导航到链接.
我认为这个问题与我对addEventListener(或者它的实现的限制)的使用有关,因为如果我手动在HTML文件中添加以下内容,那么行为正是我所期望的:
<a href="http://www.google.com" onclick="return confirm('Are you sure?')">Google</a><br />
Run Code Online (Sandbox Code Playgroud) 我正在动态创建一些<div>元素,然后innerHTML用文本填充它们的属性.我正在尝试设置这样的onclick事件处理程序:
myDiv.onclick = function() { alert("Hello!") };
Run Code Online (Sandbox Code Playgroud)
我能做到的.我想要做的是能够在新定义的onclick函数中访问值/ innerHTML(Javascript和DOM的新内容,所以我不确定我正在寻找的是什么术语).我如何访问myDiv为其onclick属性定义的函数内的数据?myDiv将是一个简单的事情:
<div>StackOverflow</div>
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
Onkeydown,我运行以下JavaScript:
function ThisOnKeyDown(el) {
if (el.title == 'textonly') {
!(/^[A-Za-zÑñ-\s]*$/i).test(el.value) ? el.value = el.value.replace(/[^A-Za-zÑñ-\s]/ig, '') : null;
}
if (el.title == 'numbersonly') {
!(/^[0-9]*$/i).test(el.value) ? el.value = el.value.replace(/[^0-9]/ig, '') : null;
}
if (el.title == 'textandnumbers') {
!(/^[A-Za-zÑñ0-9-\s]*$/i).test(el.value) ? el.value = el.value.replace(/[^A-Za-zÑñ0-9-\s]/ig, '') : null;
}
}
Run Code Online (Sandbox Code Playgroud)
这三个标题属性之一被赋予页面上的各种输入字段.只要无效字符被正确删除,代码就会起作用,但直到输入下一个字符为止.我想找到一种简单地拒绝无效输入的方法.我感谢您的帮助!
编辑:我全局创建事件.我是这样做的:
function Globalization() {
var inputs = document.getElementsByTagName('input');
for (i = 0; i < inputs.length; i++) {
inputs[i].onfocus = createEventHandler(
ThisOnFocus, inputs[i]);
inputs[i].onblur = createEventHandler(
ThisOnBlur, inputs[i]);
inputs[i].onkeydown = createEventHandler( …Run Code Online (Sandbox Code Playgroud) 当用户将文件拖到窗口上时,我想在视口上叠加div.
但是,我遇到了事件传播的问题.当我设置的叠加display: block它似乎火了一个dragleave事件,然后又dragenter另,然后dragleave再次,所以它总是在后dragleave状态.当然我打电话e.stopPropagation()和e.preventDefault()事件对象,但它似乎没有什么区别.
在窗口上拖动某些内容时,console.log()输出:
dragenter
dragenter
dragleave
dragenter
dragleave
Run Code Online (Sandbox Code Playgroud)
css.默认#overlay设置为display: none,但会显示是否body有dragenter类:
body {
position: absolute;
height: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: 0;
padding: 0;
}
#overlay {
position: absolute;
height: auto;
width: auto;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: url(bg.png) repeat-x top right, url(bg.png) repeat-x bottom left, url(bg.png) repeat-y top right, url(bg.p …Run Code Online (Sandbox Code Playgroud) 一些现代浏览器支持HTML5"oninput"事件,包括Firefox 3.X
然而,奇怪的是,它似乎只适用于内联javascript:
<input id = "q" oninput="alert('blah')">
Run Code Online (Sandbox Code Playgroud)
当我尝试使用javascript代码设置它时,它不会触发.
var q = document.getElementById("q");
q.oninput = function(){alert("blah");};
Run Code Online (Sandbox Code Playgroud)
这只是Firefox中的一个错误,还是有这样的原因?
寻找一个正则表达式来验证所有可打印字符.正则表达式只需要在JavaScript中使用.我已经阅读了这篇文章,但它主要讨论的是.net,Java和C,但不是JavaScript.
您必须只允许这些可打印字符:
az,AZ,0-9和32个符号:!"#$%&'()*+, - ./:; <=>?@ [] ^ _` {|}〜和空格
需要一个JavaScript正则表达式来验证输入字符是上述之一并丢弃其余的.
我想知道是否有可能查看
1.有多少事件监听器
2.什么类型的事件监听器
在一个网页上.
原因是因为使用off();方法.
我正在使用这个框架,它基本上是jQuery但不是.
是的,我正在使用,但是偶然没有移除,而且我感觉eventListener元素上不止一个.
如果使用javascript无法实现,可以在浏览器中使用吗?
在FooView..中发生了自定义事件
// views/foo_view.js
this.trigger("something:happened");
Run Code Online (Sandbox Code Playgroud)
关联FooController绑定处理程序以处理事件...
// controller/foo_controller.js
initialize: function() {
this.fooView = new FooView();
this.fooView.bind("something:happened", this.onSomethingHappened, this);
}
onSomethingHappened: function(event) {
// Do something else.
}
Run Code Online (Sandbox Code Playgroud)
为了测试事件处理,我将为Jasmine编写以下测试:
it("should do something else when something happens", function() {
var fooController = new FooController();
spyOn(fooController, "onSomethingHappened");
fooController.fooView.trigger("something:happened");
expect(fooController.onSomethingHappened).toHaveBeenCalled();
});
Run Code Online (Sandbox Code Playgroud)
虽然,测试失败了..
FooView should do something else when something happens.
Expected spy onSomethingHappened to have been called.
Error: Expected spy onSomethingHappened to have been called.
at new jasmine.ExpectationResult (http://localhost:8888/__JASMINE_ROOT__/jasmine.js:114:32) …Run Code Online (Sandbox Code Playgroud)