我不能在IE中使用Javascript来发起个人事件.在Firefox中工作很棒.
我的代码是:
var evento;
if(document.createEventObject)
{
evento = document.createEventObject();
document.fireEvent('eventoPersonal', evento);
}
//FF
else
{
evento = document.createEvent('Events');
evento.initEvent('eventoPersonal',true,false);
document.dispatchEvent(evento);
}
Run Code Online (Sandbox Code Playgroud)
但是当尝试document.fireEvent('eventoPersonal', evento);在IE中执行时,它不起作用.如何在IE中解除自定义事件?
在Internet Explorer中,我在执行的行中收到错误:"无效的参数" document.fireEvent('eventoPersonal', evento);
当某个DIV进入页面时,是否可以触发特定的javascript事件?
比方说,我有一个非常大的页面,比如2500x2500,我有一个位于1980x1250位置的40x40 div.div不一定是手动定位的,它可能存在,因为内容将其推到那里.现在,当用户滚动到div可见的点时,是否可以运行一个函数?
我遇到window.onload和document.onload事件的问题.我读到的所有内容都告诉我,在DOM完全加载其所有资源之前,这些内容不会触发,似乎这对我来说不会发生:
我在Chrome 4.1.249.1036(41514)和IE 8.0.7600.16385中尝试了以下简单页面,结果相同:两者都显示消息"It failed!",表示myParagraph未加载(因此DOM似乎不完整).
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<script type="text/javascript">
window.onload = doThis();
// document.onload gives the same result
function doThis() {
if (document.getElementById("myParagraph")) {
alert("It worked!");
} else {
alert("It failed!");
}
}
</script>
</head>
<body>
<p id="myParagraph">Nothing is here.</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我在外部.js文件中使用比这更复杂的脚本,但这说明了问题.我可以让window.onload设置一个计时器半秒来运行doThis(),但这似乎是一个不优雅的解决方案,并没有回答为什么window.onload似乎没有做什么的问题每个人都这样说.另一个解决方案是设置一个定时器,用于检查DOM是否已加载,如果不是,它将在半秒后调用自身(因此它将继续检查,直到加载DOM),但这对我来说似乎过于复杂.是否有更合适的事件要使用?
在以下链接中
<a href=\"#\" onclick=javascript:print(\"\") style=\"color:blue;\">Print</a>"
<script>
function print()
{
//How to print the contents of another page
}
Run Code Online (Sandbox Code Playgroud) 为了添加事件,我们可以使用这个简单的第一个解决方案:
function AddEvent(html_element, event_name, event_function)
{
if(html_element.attachEvent) //Internet Explorer
html_element.attachEvent("on" + event_name, function() {event_function.call(html_element);});
else if(html_element.addEventListener) //Firefox & company
html_element.addEventListener(event_name, event_function, false); //don't need the 'call' trick because in FF everything already works in the right way
}
Run Code Online (Sandbox Code Playgroud)
或者这第二个解决方案(添加内联事件):
function AddEvent(html_element, event_name, event_function)
{
var old_event = html_element['on' + event_name];
if(typeof old_event !== 'function')
html_element['on' + event_name] = function() { event_function.call(html_element); };
else
html_element['on' + event_name] = function() { old_event(); event_function.call(html_element); };
}
Run Code Online (Sandbox Code Playgroud)
这些都是跨浏览器,可以这种方式使用: …
我在使用Javascript的Internet Explorer中遇到了一个奇怪的问题.在每个浏览器中,我都进行了测试,启用了javascript,但它似乎只有在我按下F12后才能运行,在调试模式下运行它.更令人困惑的是,在启动IE调试器后,一切都按照假设工作.任何想法可能是什么?
iScroll4onScroll尚不支持该事件.
有没有已知的方法来扩展iScroll以支持onScroll事件?
我有一个可以解雇的事件.我尝试使代码尽可能高效,但在某些情况下它可以达到最大调用堆栈,这是我无法控制的.它不是一个无限的堆栈,它会在某个时刻结束,但有时它可能会因为极限而在它完成之前崩溃.
如果我设置2个类似的事件监听器并拆分代码,我会增加调用堆栈的数量吗?或者我该怎么办?
更新:它是关于DOM更改事件(仅使用Webkit,因此不关心其他浏览器),它也可以根据某些条件修改DOM.我还没有真正达到这个限制,但从理论上说,它可能会.我仍在优化代码,以尽可能减少DOM操作.
更新2:我包括示例(非真实)示例:
document.addEventListener('DOMSubtreeModified', function(event){
this.applyPolicy(event);
}, true);
function applyPolicy(event){
if( typeof event != "undefined" ){
event.stopPropagation();
event.stopImmediatePropagation();
}
if( !isButtonAllowed ){
$('button:not(:disabled)').each(function(){
$(this).attr('disabled', true);
});
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一个示例代码,但即使在这种情况下,如果您说100个按钮,调用堆栈也将在100秒内.请注意,如果使用$('button').attr('disabled', true);,这将导致调用堆栈问题,因为jQuery将尝试无限地修改DOM.
我有代码,当用户点击p标签时选择文本但我不想在用户选择里面的文本时这样做.是否有可能检测到点击但没有阻力?
我有这样简单的代码:
$('.conteiner').on('click', 'p.xxx', function() {
$(this).selection();
});
Run Code Online (Sandbox Code Playgroud)
但即使我在mousedown和mouseup之间拖动,也会执行click.选择是一个使用getSelection或Range选择文本的插件.
嘿stackoverflowers,
removeEventListener()当我不使用throttle()lodash时工作.
window.addEventListener('scroll', this.checkVisible, 1000, false);
window.removeEventListener('scroll', this.checkVisible, 1000, false);
Run Code Online (Sandbox Code Playgroud)
(我绑定了构造函数中的方法)
不幸的是,throttle(this.checkVisible)功能缠绕它 - 不起作用.我认为这是因为当尝试删除监听器时,throttle()会生成新的实例,也许我应该全局绑定它.怎么样(如果是这样的话)?
import React from 'react';
import throttle from 'lodash.throttle';
class About extends React.Component {
constructor(props) {
super(props);
this.checkVisible = this.checkVisible.bind(this);
}
componentDidMount() {
window.addEventListener('scroll', throttle(this.checkVisible, 1000), false);
}
checkVisible() {
if (window.scrollY > 450) {
// do something
window.removeEventListener('scroll', throttle(this.checkVisible, 1000),
false);
}
}
render() {
return (
<section id="about"> something
</section>
);
}
}
export default About;
Run Code Online (Sandbox Code Playgroud)
谢谢,善意的人!
javascript ×9
jquery ×3
dom ×2
events ×2
html ×1
iscroll4 ×1
mouseevent ×1
onload ×1
onload-event ×1
printing ×1
reactjs ×1