这是场景:
我的用户被呈现为网格,基本上是电子表格的精简版本.网格中的每一行都有文本框.当他们更改文本框中的值时,我正在对其输入执行验证,更新驱动网格的集合,并重新绘制页面上的小计.这全部由每个文本框的OnChange事件处理.
当他们点击"保存"按钮时,我正在使用按钮的OnClick事件对金额执行一些最终验证,然后将他们的整个输入发送到Web服务,保存它.
至少,如果他们将表单选中到"提交"按钮,则会发生这种情况.
问题是,如果他们输入一个值,那么立即单击保存按钮,SaveForm()在UserInputChanged()完成之前开始执行 - 一个竞争条件.我的代码不使用setTimeout,但我用它来模拟缓慢的UserInputChanged验证代码:
<!-- snip -->
<script>
var amount = null;
var currentControl = null;
function UserInputChanged(control) {
currentControl = control;
// use setTimeout to simulate slow validation code (production code does not use setTimeout)
setTimeout("ValidateAmount()", 100);
}
function SaveForm() {
// call web service to save value
document.getElementById("SavedAmount").innerHTML = amount;
}
function ValidateAmount() {
// various validationey functions here
amount = currentControl.value; // save value to collection
document.getElementById("Subtotal").innerHTML = amount; // update subtotals
}
</script> …Run Code Online (Sandbox Code Playgroud) 当你删除()一个元素并在其他地方附加()时,jQuery会发生什么?
看起来这些事件都是脱钩的 - 好像你只是插入了新的html(我猜这是发生了什么).但它也可能我的代码中有一个错误 - 所以我只想在继续之前验证这种行为.
如果是这种情况 - 是否有任何简单的方法可以将事件重新组合到HTML的那一部分,或者以不同的方式移动元素而不会丢失事件.
下面我在Javascript中创建一个对象.在构造函数中,我正在设置一个事件监听器.问题是当事件被触发时,找不到this.prop,并且未定义打印输出.我该如何解决这个问题?
var someObj = function someObj(){
this.prop = 33;
this.mouseMoving = function() { console.log(this.prop);}
document.getElementById("someDiv").addEventListener('mousemove', this.mouseMoving, true);
}
Run Code Online (Sandbox Code Playgroud) 我有兴趣使用JavaScript hashchange事件来监视URL片段标识符的更改.我知道Really Simple History和jQuery插件.但是,我得出结论,在我的特定项目中,另一个JS文件的额外开销并不值得.
我想做的是采取"渐进增强"的方式.也就是说,我想测试访问者的浏览器是否支持hashchange事件,并编写我的代码以便在可用时使用它,作为增强而不是核心功能.IE 8,Firefox 3.6和Chrome 4.1.249支持它,占我网站流量的20%左右.
那么,呃......有没有办法测试浏览器是否支持特定事件?
谢谢.
我目前正在建立一个注册页面,如果用户离开,我想弹出一个CSS框询问他是否确定.我可以使用确认框来完成这个壮举,但客户说他们太难看了.我尝试过使用unload和beforeunload,但两者都无法阻止页面被重定向.使用那些事件,我返回false,所以也许有一种方法可以取消而不是返回false?
我有另一个解决方案是将它们重定向到另一个有我的弹出窗口的页面,但问题是如果他们确实想要离开页面,并且这不是一个错误,他们会丢失他们最初尝试的页面要去.如果我是用户,那会激怒我.
最后的解决方案是真正的弹出窗口.我唯一不喜欢的是主要的winow将有他们的目标页面,而pop将有我的页面.在我看来,它看起来不相干.最重要的是,我会担心弹出窗口拦截器.
只是为了添加每个人的评论.我知道阻止用户退出页面是令人恼火的,我认为不应该这样做.现在我正在使用确认框.发生的事情是它实际上并没有"阻止"用户离开,如果用户对注册有疑问,客户实际想要做的是提出建议.如果用户处于注册过程的中途并且由于某种原因离开,则客户希望向用户提供免费优惠券到研讨会(该客户正在销售研讨会)以希望说服用户注册.客户的印象是,由于用户已经在表单上,他正在考虑注册,因此他正在注册的内容可能是让用户注册的最终推动.理想情况下,我不必阻止用户离开,什么会一样好,而且在我看来更好的是我可以暂停卸载过程.也许睡觉命令?我不需要将用户留在页面上,因为他们将离开去任何其他页面.
此外,正如人们所说,这是一个非常可怕的标题,所以如果有人知道一个更好的标题,我真的很感激它,如果他们可以将标题改为不被垃圾邮件发送者邀请的东西.
如何控制仅触发一次事件?
实际上,一个快速谷歌似乎暗示.one帮助..
我正在寻找一种方法来实现尽可能多的浏览器:
var image = new Image();
image.addEventListener("load", function() {
alert("loaded");
}, false);
image.src = "image_url.jpg";
Run Code Online (Sandbox Code Playgroud)
这在IE中不起作用所以我用Google搜索并发现IE低于9不支持.addEventListener().我知道有一个jQuery等价物被调用,.bind()但这不适用于Image().为了在IE中工作,我还需要改变什么?
CSS3 resize属性可以分配给任意元素.我正在寻找一种方法来检测这样的调整大小,比如divs(我不介意它目前仅在FF中工作):
div {
resize: horizontal;
overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,onresize事件似乎没有被解雇.当这样的用户实例化调整大小发生时,如何在JavaScript中检测到?
编辑: FWIW我在Mozilla上打开了一个错误报告.如果你想跟踪它:https://bugzilla.mozilla.org/show_bug.cgi?id = 701648
是否有事件(或其他方法)来检测何时下载所有可见的图块并使用传单显示?(类似于加载所有可见地图图块时调用的Google地图事件,但代替传单)
基本上,问题在于事件"visibilitychange"的行为.
它被触发: - 当我切换到浏览器窗口内的不同选项卡时.
(还行吧)
它没有被触发: - 当我使用ALT + TAB切换到不同的窗口/程序时.
(这应该触发,因为,就像最小化时一样,窗口的可见性可能会改变)
W3页面可见性API文档:http://www.w3.org/TR/page-visibility/
在规格表中没有关于ALT + TAB /程序切换的"页面可见性"的定义.我猜它在操作系统和浏览器之间有一些关系.
有解决方法来解决此问题吗?实现相当简单,我使用jQuery监听"visibilitychange"事件,然后在其回调中,我检查"document.visibilityState"的值,但问题是事件在预期时没有触发.
$(document).on('visibilitychange', function() {
if(document.visibilityState == 'hidden') {
// page is hidden
} else {
// page is visible
}
});
Run Code Online (Sandbox Code Playgroud)
这可以在没有jQuery的情况下完成,但ALT + TAB和任务栏开关隐藏/显示预期行为仍然缺失:
if(document.addEventListener){
document.addEventListener("visibilitychange", function() {
// check for page visibility
});
}
Run Code Online (Sandbox Code Playgroud)
我也尝试了ifvisible.js模块(https://github.com/serkanyersen/ifvisible.js),但行为是一样的.
ifvisible.on('blur', function() {
// page is hidden
});
ifvisible.on('focus', …Run Code Online (Sandbox Code Playgroud)