jQuery设置onclick属性仅适用于FireFox?

时间:2010-05-13 09:09:20

标签: jquery firefox onclick

我正在尝试设置使用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一样工作。

2 个答案:

答案 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);
  });