2015-08-05 3 views
0

Я устанавливаю идентификатор элемента, скажем, кнопки, динамически. Пример приведен ниже (код может иметь синтаксические ошибки, я просто пытаюсь объяснить свою проблему).Обратитесь к идентификатору элемента динамически через Javascript

function myFunc(){ 
    var counter = 0; 
    return function(){ 
     counter += 1; 
     var rowContent = '<div>'; 
     rowContent += '<button type="button" class="btn btn-default" id="button"' + counter + '></button>'; 
     rowContent += '</div>'; 
     $('#someElement').append(rowContent); 
    }; 
} 

Теперь я хочу связать событие click с кнопкой. Мне нужно указать элемент ID при связывании события с кнопкой (например, $ ('# myID')). Но поскольку идентификатор устанавливается динамически, я точно не знаю, что такое идентификатор. Может ли кто-нибудь сказать мне, как я могу ссылаться на динамически заданный идентификатор элемента при связывании события с ним? Заранее спасибо!!

+0

Поскольку вы не знаете идентификатор, почему бы не использовать класс? Если нет, как насчет использования синтаксиса делегирования событий .on() '? – j08691

+0

Вам не нужно использовать ID. 'rowContent' содержит единственную кнопку, поэтому просто выберите 1-ю кнопку в' rowContent': 'rowContent.find ('button'). on (...)' – hindmost

ответ

2

Delegate the event к исходному элементу rowContent.

$('#someElement').append(rowContent); 
$('button', rowContent).on('click', function(e) { 
    // button element in the 'rowContent' context 
} 

Делегирование его #someElement также будет работать, если вы не будете положить несколько кнопок с различных обработчиков щелчка внутри там.

+0

Итак, так, предположим, есть 5 строк и нажата любая кнопка в одной из строк (каждая из которых имеет одну кнопку), событие будет выполняться только для элементов этой конкретной строки? – user3033194

+1

Должно же быть, да. Однако, если вам нужно одно и то же или подобное событие щелчка для каждой кнопки, вы должны делегировать его * один раз * на общий элемент предка и использовать 'this' в обработчике событий, чтобы указать кнопку, которая была нажата , – Blazemonger

+0

Спасибо, я понял, что вы имеете в виду. Я сделаю это сейчас. – user3033194

2

Вы должны лучше использовать делегирование событий в таком случае:

$('#someElement').on('click','[id^=button]',function(){ 
    //do stuff 
}); 
+0

Благодарим также за помощь! – user3033194

+0

@ user3033194: рад, что это помогает :) –

0

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

rowContent += '<button type="button" mybtn="" class="btn btn-default" id="button"' + counter + '></button>'; 

и вот селектор :

$("div[mybtn]") 
Смежные вопросы