JQuery настройки атрибута onclick работает только на FireFox? - PullRequest
0 голосов
/ 13 мая 2010

Я пытаюсь установить атрибут " onclick " для ссылки, созданной с помощью jQuery.

Хотя другие атрибуты работают без проблем (например, href, но также и другие пользовательские атрибуты), установка " 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; но это не главное, я просто хочу установить атрибут и не могу понять, почему он не работает, как любой другой атрибут.

Ответы [ 2 ]

4 голосов
/ 13 мая 2010

Правильно ли это поведение?

Поскольку attr('onsomeevent', ...) никогда не было способом добавления прослушивателей событий, никогда не поддерживалось и работает только в Firefox по совпадению, да.

А почему?

Поскольку IE до версии 8 не может напрямую получать / устанавливать атрибуты HTML. Вызов setAttribute() только устанавливает свойство DOM с тем же именем. А свойство onclick не является строковым свойством, поэтому вы не можете записать в него строку. Он принимает только значение функции.

jQuery attr() запутывает проблему, вызывая attr, но фактически записывая свойства DOM, а не атрибуты HTML ... но используя имена атрибутов HTML (например, class) вместо имен свойств DOM (например, className).

( За исключением случаев, когда он не , потому что в некоторых случаях он пытается скрыть разницу с помощью атрибутов. За исключением , который все еще не работает все время в IE для причина выше. Это не один из самых гордых моментов в jQuery.)

Так или иначе, в общем случае JavaScript в строке - это запах кода . Лучший способ продвижения вперед для jQuery и современного JavaScript в целом - использовать вместо этого функциональные объекты (возможно, встроенные function() { ... } выражения).

2 голосов
/ 13 мая 2010

попробуйте 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>

edit : попробуйте изменить 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);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...