-disguise
公司项目想要实现一种功能:
单击一个按钮或超链接,
然后会出现其他的超链接,
这时要让其中的一个超链接被单击,
以
显示一个初始页面。(公
司页面使用了
frameset
)
很显然,之后的超链接单击事件需要通过
JavaScript
来触发。
一开始,
我想到了用
jQuery
p>
的
click()
事件来触发超链接的单击
事件
(与
trigger(
一样的效果
)。结果发现不如人意。
实例如下:
效果图
IE:
FireFox:
Html
代码
<
h3
><
/p>
请单击
”Click
Me
。测试提交按钮与超链接是否也被单击了。
h3
>
<
button
id
=
Click
< br>Me
button
>
<
form
action
=
<
input
type
=
name
=
value
=
徐新华
-polaris
readonly
/>
<
input
id
=
type
=
value
=
别点击此按钮提交
onclick
=
触
发了提交按钮的单击事件!
');
form
>
<
a
id
=
href
=
onclick
=
触发了超链接的单击
事件!
');
>
代码触发超
链接
a
>
Javascript
代码
$$(
function
()
{
$$(
).click(
function
()
{
$$(
).click();
$$(
).click();
});
});
当单击:
Click Me
按钮时,先
后弹出提交按钮被单击、超链接被单击的对话框,这表明两
者的单击事件都被触发了。然
而,从地址栏中可以看到,
提交按钮的单击事件触发后,
执行<
/p>
了它的默认行为:提交表单;可是超链接的单击事件触发后,并没有链接到目标地址。
p>
(不
要怀疑说是提交按钮的提交地址对超链接有影响,
因为我去掉提交按钮,
只留下超链接也不
会链接到目
标地址。)
也许
< br>jQuery
中的
click()
方法对超链接的单击事件并没有使其执行浏览器的默认行为(即
使你手动加入
return
true
也没有用)。注意:<
/p>
tigger(
与
click()
一样的。
jQuery
文档中说“这个函数也
会导致浏览器同名的默认行为的执行”
。同名的?不太明白,但是超
链接的确不能执行它的默认行为。
这是,
只能想另外的方法
——抛弃
jQuery
提供的事件。
回到
JavaScript
自己的事件——
click
。代码如下:
Javascript
代码
$$(
function
()
{
$$(
).click(
function
()
{
$$(
).click();
$$(
).get(0).click();
});
});
在
IE
中一测试,通过了??有点兴奋。可是,在
fireFox
中却提示:
click
()
不是一个
function
。说真
的,
IE
浏览器提供的东西对开发人员来说很好,而
fireFox
却没有,比如
之前说到的
onpropertychange
等。
不过,
我们必须的考虑
IE
之外的浏览器。<
/p>
在网上查资料,
有不少人提到在
fire
Fox
中要用代码触发一个事件,需要如下处理:
Javascript
代码
var
evt
=
Event(
);
ent(
,
false
,
false
);
//
或用
initMouseEvent()
,不过需要更
多参数
$$(
).get(0).dispatchEvent(evt);
按以上方法来实现我想要的功能,代码如下:
Javascript
代码
$$(
function
()
{
$$(
).click(
function
()
{
$$(
).click();
if
($$.)
{
$$(
).get(0).click();
}
else
{
var
evt
=
Event(
);
ent(
,
false
,
false
);
$$(
).get(0).dispatchEvent(evt);
}
});
});
这时,在
IE
中是完全正常的。然而,在
fireFox
中的情况与直接使
用
jQuery
的
click()
p>
事
件一样,能触发单击事件,超链接却没有转到目标地址(注意:提
交按钮用此方法也是能够
提交的,
我想
jQuery
的
click()
的实现
大概是这样实现的吧)
。
哎,
觉得还是
IE
好。
呵呵。
如此一来,这种方法仍然不能解决
FireFox
中的问题。得继续寻找其他方法。
既然在
fireFox
中能够触发单击事件,却不能转到超链接的目标地址,那么,可以用
js
p>
来
实现跳转,即:使用
location<
/p>
对象。代码如下:
Javascript
代码