我正在尝试设置使用jQuery生成的链接的“ onclick ”属性。
虽然其他属性没有问题(例如.href,但也有其他自定义attrs),但设置“ onclick ”似乎只适用于 FireFox 。在其他浏览器上,该属性将被忽略。
任何提示?这种行为是否正确?为什么?
<html><head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
jQuery(function(){
var obj = $('<a/>');
obj.html('click me');
obj.attr({'href':'#test', 'onclick':'alert("o hai"); return false;'});
$('body').append(obj);
});
</script>
</head><body /></html>
编辑:我知道.click()jQuery方法;但这不是重点,我只是想设置属性,并且无法弄清楚为什么它不能像其他任何attr一样工作。
答案 0 :(得分:4)
这种行为是否正确?
尽管attr('onsomeevent', ...)
从来就不是添加事件监听器的方式,但从来没有得到支持,只有巧合才能使用Firefox,是的。
为什么?
因为IE之前的版本8无法直接获取/设置HTML属性。调用setAttribute()
仅设置同名的DOM属性。并且onclick
属性不是字符串属性,因此您无法将字符串写入其中。它只接受函数值。
jQuery的attr()
通过调用attr
来解决问题,但实际上是写入DOM属性而不是HTML属性...但是使用HTML属性名称(例如。class
)而不是DOM属性名称(如className
)。
(除非它不,因为在某些情况下它会尝试通过使用属性来隐藏差异。除了仍然无法正常工作 IE出于上述原因。这不是jQuery最骄傲的时刻之一。)
无论如何,一般来说,字符串中的JavaScript是代码气味。 jQuery和现代JavaScript的最佳前进方式是使用函数对象(可能是内联function() { ... }
表达式)。
答案 1 :(得分:2)
尝试jQuery方式......
<script type="text/javascript">
jQuery(function(){
var obj = $('<a/>');
obj.html('click me')
.attr('href','#test')
.click(function() {
alert("o hai");
return false;
})
$('body').append(obj);
});
</script>
修改:尝试更改onClick点击onClick,注意大写字母“C”
jQuery(function(){
var obj = $('<a/>');
obj.html('click me');
obj.attr({'href':'#test', 'onClick':'alert("o hai"); return false;'});
$('body').append(obj);
});