Проблемы с тегом привязки html onclick!

Я столкнулся со странной проблемой с тегами привязки html. У меня есть тег привязки на странице html, и при нажатии на тег «a» он должен выдать мне предупреждающее сообщение. Это работает хорошо. Но если я добавлю новый тег «a» с помощью jquery на html-страницу, и щелчок по этому добавленному тегу «a» не будет работать. я смог указать href, target blah blah blah для добавления тега 'a', но .. функция onlick не работает. Есть предположения ???

Заранее спасибо.


person bluwater2001    schedule 09.02.2010    source источник
comment
Как прикрепить обработчик к событию onclick?   -  person Locksfree    schedule 10.02.2010
comment
Некоторый код должен быть включен сюда.   -  person Michael Bavin    schedule 10.02.2010


Ответы (4)


В jQuery вы обычно используете функцию .click() в селекторе, чтобы установить обработчик щелчка. Обратите внимание, что если несколько элементов соответствуют селектору, для нескольких элементов будет установлен обработчик кликов.

Вот тривиальный фрагмент кода, который должен делать то, что вы хотите:

<html>
    <head>
        <script type="text/javascript" src="jquery.js"></script>
    </head>
    <body>
        <script type="text/javascript">

        function addLink(label, msg) {
            /* Create link element.
               The href="#" makes the link act like a link
               (be highlighted, selectable, etc.).
               The onClick="return false;" keeps the link from
               scrolling the browser to the top of the page.
               The onClick is not interfered with by jQuery's
               .click() . */
            var link = $('<a href="#" onClick="return false;">' + label + '</a>');

            /* Install click handler. */
            function clicked_handler() {
                alert(msg);
            }
            link.click(clicked_handler);

            /* Add the link to the body. */
            $('body').append(link);
        }

        addLink('Link 1', 'You clicked link 1');
        $('body').append('<br/>');
        addLink('Link 2', 'You clicked link 2');

        </script>
    </body>
</html>
person Joey Adams    schedule 09.02.2010

Ваш вопрос не ясен.

Я предполагаю, что вы добавляете обработчик кликов к тегам <a>, записывая $('a.whatever').click(function() { ... }), а затем добавляя в документ новые теги <a>.

Когда вы пишете $(...).click(...), он добавляет обработчики только к элементам, которые были найдены $(...) во время добавления обработчика. Он не будет применяться ни к каким элементам, которые вы добавите позже.

Вероятно, вы ищете метод jQuery live, который будет обрабатывать событие для всех< /em> элементы, соответствующие селектору, независимо от того, когда они были созданы.

Например:

$('a.whatever').live('click', function(e) { ... });
person SLaks    schedule 09.02.2010
comment
Большое спасибо за ваш ответ SLaks. Решение Адамса сработало для меня. Пожалуйста, прокрутите вниз, чтобы увидеть ответ. .Live также является лучшим вариантом для использования, но... У меня так много сценариев Jquery в моем решении, и есть конфликт (все еще мне нужно выяснить, откуда он берется), и он не распознает .live как функцию и выдает ошибки. Обходное решение Адамса хорошее. Пожалуйста, проверьте это, если это возможно. Спасибо. - person bluwater2001; 10.02.2010

Попробуйте использовать это:

$("a").live("click", function(){
 alert("Tadah!");
});
person Mike Robinson    schedule 09.02.2010
comment
Большое спасибо за ваш ответ Майк. Обходное решение Адамса сработало для меня. - person bluwater2001; 10.02.2010

Добавление события работает с тем, что уже есть на странице. Если вы добавляете что-то в будущем, вам нужно привязать новое событие клика к этой новой вещи или использовать live, что всегда должно быть вторым вариантом.

поэтому вместо того, чтобы делать

$(something).append('<a href="" etc. ');

попробуй что-нибудь вроде этого

$('<a></a>').attr('href','some url here').bind('click',function(){}).appendTo('body');
person naugtur    schedule 09.02.2010
comment
Большое спасибо за ваш ответ naugtur. Решение Адамса сработало для меня. Пожалуйста, прокрутите вниз, чтобы увидеть ответ. - person bluwater2001; 10.02.2010