-更
javaScript,
< br>页面自动加载事件详解
<
/p>
篇一:
javascript
动态添加事
件
往往我们需要在
JS
中动态添加事件,这就涉及到浏览器兼容性问题了,以下谈及的几
种方法,我
们也常常混合使用。
方法一、
setAttribute
var obj =
mentById(
ribute(
:
< br>alert('
测试
');
这里利用
setAttribute
指定
onclick
属性,简单,很好理解,
但是:
IE
不支持,
IE
并不是不支持
setAttribute
这个函数,
而是不支持用
setAttribute
设
置某些
属性,
包括对象属性、
集合属性、
事件
属性,
也就是说用
setAttribute
设置
<
/p>
style
、
onclick
、
onmouseover
这些属性在
IE
中是行不通的。
LEO
:
在
IE6
下尝试成功
方法二、用
attachEvent
和
addEventListener
IE
支持
attachEvent
Event(
function Foo()
{
alert(
测试
< br>
}
也可写在一起
Event(
测试
其它浏览器支持
addEventListener
ntListener(
function Foo()
{
p>
alert(
测试
}
同样也可写在一起
ntL
istener(
测试
注意
attachEvent
的事件带
on
,如
onclick
,而
addEventListener
不带
on
,如
click
。
顺便说一下
addEventListener
的第三个参数(虽然很少用)
useCapture
-
如果为
true
,
则
useCapture
指示用户希望启动捕获。启动捕获后,
所有指定类型的事件将在被指派到树中
其下面的任何
EventTargets
之前指派给已注册的
EventLi
stener
。
正在通过树向上
bubbling
的
事件将不触发指定的使用捕获的
EventListener
。
1 / 11
综合应用
if (Event)
{
//IE
的事件代码
}
else
{
//
其它浏览器的事件代码
}
方法三、事件
=
函数
例:
k = Foo;
这在多个浏览器中均支持,这是属于旧的规范(方法二属于
DOM2
的规范),不过由
于使用方
便,用的场合也比较多。
下面是我的解决办法
:
function show(){
alert(
}
ribute('onclick', ?
eval(function(){show()}) :
'javascript
:
show()');
p>
以上方法在
ie8
下会出现错误:
ie8
也支持
,
但
eval(function(){show()})
却
会出错
js
用来区别
IE
与其他浏览器及
IE6-8
之间的方法。
< br>
1
、
2
、
!!XObject;
。
!!
的作用是把一个其他类型的变量转成的<
/p>
bool
类型
使用方法如下:
if
(){
alert(”IE
浏览器
”);
}else{
alert(”
< br>非
IE
浏览器
”);
}
if (!!XObject){
alert(”IE
浏览器
”);
}else{
alert(”
< br>非
IE
浏览器
”);
}
<
/p>
下面是区别
IE6
、
IE7
、
IE8
之间的方法:
p>
var
isIE=!!XObject;
var isIE6=isIE&&!pRequest;
var isIE8=isIE&&!!ntMode;
2 / 11
var
isIE7=isIE&&!isIE6&&!isIE8;
if
(isIE){
if (isIE6){
alert(”ie6″); }else if
(isIE8){alert(”ie8″); }else if (isIE7){
alert(”ie7″);
}
}
所以
ribute('onclick',
?
eval(function(){show()})
:
'javascript
:
show()');
要改为:
一:
ribute('onclick', &&
eval(function(){show()}) :
'javascript
:
show()');
二:
<
/p>
如果不想像上面那样改,也可以将
ie8
声明为
ie7.
在
head
标签上加上
!ntMode ?
篇二:
js
模拟点击事件
公司项目想要实现一种功能:
单击一个按钮或超链接,然后会出现其他的超链接,这时要让
其中的一个超链接被单击,
以显示一个初始页面。(公司页面使用了
frameset
)
很显然,之后的超链接单击事件需
要通过
JavaScript
来触发。
p>
一开始,我想到了用
jQuery
的
click()
事件来触发超链接的单击事件(与
trigger(
一
样的效果)。结果发现不如人意。
p>
实例如下:
效果图
IE:
FireFox:
Html
代码
Click Me
代码触发超链接
Javascript
代码
$$(function()
{
$$(
{
3
/ 11
$$(
$$(
});
});
当单击:
Click Me
按钮时,先后弹出提交按钮被单击、超链接被单击的对话框,这表明两
者
的单击事件都被触发了。然而,从地址栏中可以看到,提交按钮的单击事件触发后,执行了
它的默认行为:提交表单;可是超链接的单击事件触发后,并没有链接到目标地址。
(
不要怀
疑说是提交按钮的提交地址对超链接有影响,
因为我去掉
提交按钮,
只留下超链接也不会链接
到目标地址。)
也许
jQuery
中的
cli
ck()
方法对超链接的单击事件并没有使其执行浏览器的默认行为(即
使你手动加入
return true
也没有用)
p>
。
注意:
tigger(
< br>与
click()
一样的。
jQ
uery
文档中说
“
这
个函数也会导致浏览器同名的默认行为的执行
”
。同名
的?不太明白,但是超链接的确不能执
行它的默认行为。这是,只能想另外的方法
——
抛弃
jQuery
提供的事件。回到
JavaScript
自己
的事件
——
click
。代码
如下:
Javascript
代码
$$(function()
{
$$(
{
$$(
$$(
});
});
在
p>
IE
中一测试,
通过了
??
有点兴奋。
可是,
在
fireFox
中却提示:
click()
p>
不是一个
function
。
说真的,
IE
浏览器提供的东西对开发人员来说很好
,而
fireFox
却没有,比如之前说到的
< br>onpropertychange
等。不过,我们必须的考虑
< br>IE
之外的浏览器。在网上查资料,有不少人提到
在
p>
fireFox
中要用代码触发一个事件,需要如下处理:
Javascript
代码
var evt = Event(
ent(
false,
false);//
或
用
initMouseEvent()
,
不
过
需
要
更
多
参
数
$$(
按以上方法来实现我想要的功能,代码如下:
Javascript
代码
$$(function()
{
$$(
{
$$(
4 / 11
if($$.)
{
$$(
}
else
{
var evt = Event(
ent(
$$(
}
});
});
这时,在
IE
中是完全正常的。然而,
在
fireFox
中的情况与直接使用
jQuery
的
click()
事件<
/p>
一样,能触发单击事件,超链接却没有转到目标地址(注意:提交按钮用此方法也是能够提
交
的,
我想
jQuery
的
click()
的实现大概是这样实现的吧)
p>
。
哎,
觉得还是
I
E
好。
呵呵。
如此一来,
这种方法仍然不能解决
FireFox
中的问题。得
继续寻找其他方法。
既然在
fireFox
中能够触发单击事件,却不能转到超链接的目标地址,那么,可以用
js
p>
来
实现跳转,即:使用
location<
/p>
对象。代码如下:
Javascript
代码
$$(function()
{
$$(
{
$$(
if($$.)
{
$$(
}
else
{
//
绑定单击事件
$$(
{
on = $$(this).at
tr(
也可以,但
是执行的时间不同
});
//
触发单击事件
$$(
5 / 11
-更
-更
-更
-更
-更
-更
-更
-更
-
上一篇:shelxl简单教程
下一篇:标记活细胞内蛋白质的化学标签