Ошибка jquery от имени селектора переменной.Может кто-нибудь показать мне правильный способ сделать это? - PullRequest
0 голосов
/ 15 декабря 2011

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

if( item.current == '2' )
                    {

                         playBeep = true;

                        htmlStr += '<tr class="current-alert curaler' + incrementer.toString() + '">';

                        var selectorString = 'curaler' + incrementer.toString();


                        $( ('.' + selectorString) ).bind( 'click' , function() 
                            {

                            alert('hi');



                            });

                    } 
                else if ( item.current == '1')
                    {
                     htmlStr += '<tr class="current">';
                    } 
                else 
                    {
                        htmlStr += '<tr>';
                    }

                htmlStr += '        <td class="first">' + item.percent + '%</td>';
                htmlStr += '        <td class="second ' + ( ( item.current == '2' ) ? 'sym' + incrementer.toString() : '' ) + ' ">' + item.symbol + '</td>';

                if(item.symbol != 'CASH'){
                    htmlStr += '        <td class="third">@</td>';
                } else {
                    htmlStr += '        <td class="third"> </td>';
                }

                htmlStr += '        <td class="fourth">' + item.purchasedAt + '</td>';
                htmlStr += '        <td class="stockName">' + item.fullName + '</td>';
                htmlStr += '    </tr>';
            });
            htmlStr += '    </table>';
        } else {
            htmlStr += "<i>100% Cash</i>";
        }

Ответы [ 4 ]

2 голосов
/ 15 декабря 2011

Это не работает, потому что элемент, на который вы пытаетесь нацелиться, еще не является частью dom.

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

$('.' + selectorString).live ('click' , function() { ... } );

или, для jquery 1.7 и далее используйте on():

$('.' + selectorString).on('click' , function() { ... } );

В качестве альтернативы, просто убедитесь, что вы запускаете bind() после вставки элемента.

Если вы генерируете несколько элементов, может быть проще просто убедиться, что все они имеют общий класс, и использовать присвоение события click для этого класса, используя live() или on().

1 голос
/ 15 декабря 2011

Ваш селектор правильный, если он у вас есть, однако, если элемент еще не существует, когда он выполняется, он может теперь быть найден.

Вот альтернативный метод, который может подобрать любой элемент счастичное совпадение классов:

$("[class^='curaler']").on('click', function(){
    //do stuff here
});

Выполнено выше, вам не нужно указывать это в вашем условном выражении, оно может быть просто в вашем

$(document).ready(function(){
//  put it here
}};

РЕДАКТИРОВАТЬ: На основе вашегопоследнее обновление:

$( ('.' + selectorString) ).

должно быть

$('.' + selectorString).

или

var myselector= '.' + selectorString;
$(myselector).on('click',function(){
  alert(  $(this).text());//sample to alert the text of the clicked element
});

ПРИМЕЧАНИЕ. Если вы используете версию до 1.7.1, вы можете использовать делегатвместо «вкл» с немного другим синтаксисом.

РЕДАКТИРОВАТЬ 2: обсуждение различий между .delegate, .live и .bind здесь: http://brandonaaron.net/blog/2010/03/4/event-delegation-with-jquery

, но с версией версии 1.7 вы можетеиспользуйте .on() вместо.

0 голосов
/ 15 декабря 2011

То, что у вас есть, правильно для селектора, если элемент html на месте Вы можете использовать bind, но я предпочитаю click.

$('.' + selectorString).click(function() {
  alert('Handler for .click() called.');
});

Подробнее о клике на сайте jQuery: http://api.jquery.com/click/

0 голосов
/ 15 декабря 2011
$(( '.' + selectorString) ).bind( 'click' , function(){});

Это правильный путь!

...