2015-05-11 3 views
0

Есть 7 вопросов по форме с номерами от 1.1 до 1.4 и 2.1 до 2.3, имеющие радио как ответ (ID: # radio_1.1 и # radio_1.2) и textarea для комментариев (ID: # textarea_1.1, # textarea_1. 2).Как создать динамический идентификатор в JQuery без использования для цикла?

Вопросы зависят друг от друга как вопрос 1.4 ответ, если выбрано «да» в радио, а затем отключит текстовое поле вопроса 2.2. Кроме того, необходимо выполнить эту функцию во время клика, а также при загрузке.

Ниже образом я генерируя вопрос идентификатор сейчас в JQuery/JavaScript:

for(var tabNumber=1;tabNumber<=2;tabNumber++) { 
    var questions=0; 
    if(tabNumber==1) questions=4; 
    if(tabNumber==2) questions=3; 
    for(var decimalNumber=1;decimalNumber<=questions;decimalNumber++){ 
     disableit(tabNumber+"\\."+decimalNumber,value); //This generate id of comment box like #textarea_1.1, #textarea_1.2 and radio also like #radio_1.1 and #radio_1.1 and even few classs like .Class_1.1 and .Class_1.2 
    } 
} 

в disableit мы имеем функциональность как:

$(".Class_"+number).addClass("yahooeffect"); 
$("#textarea_"+number).attr('disabled', true); 

Есть ли альтернатива в JQuery/JavaScript, который помогает удалить для цикла и сделать выше операции другим простым способом? Любое регулярное выражение, которое может мне помочь .Class_ [1.1-1.9] и т. Д., Чтобы я мог использовать вещи только в одном или двух утверждениях?

Update

Каждый вопрос в одной строке. Как (1.1 - Вы хотите птицу? ДА/НЕТ Комментарий) (1.2 - Вы хотите Doggy? Да/Нет комментариев). Каждый из этих 4 в отдельном div как div для 1.1 и div для вопроса и div для радио и div для комментариев. Таким образом, идентификаторы разделяются, как объясняется в вопросе. Вопросы смешали DEPENDENCY

ответ

0

Попробуйте uniqueId

Пример:

$(selector).uniqueId(); 

HTML:

<div class="checked">1</div> 
<div class="checked">2</div> 
<div class="checked">3</div> 
<div class="checked">4</div> 
<div class="checked">5</div> 
<div class="checked">6</div> 
<div class="checked">7</div> 
<div class="checked">8</div> 
<div class="checked">9</div> 
<div class="checked">10</div> 
<div class="checked">11</div> 
<div class="checked">12</div> 

JS:

$(document).ready(function() { 
    $(".checked").uniqueId(); 
}); 

Результат:

<div class="checked" id="ui-id-1">1</div> 
<div class="checked" id="ui-id-2">2</div> 
<div class="checked" id="ui-id-3">3</div> 
<div class="checked" id="ui-id-4">4</div> 
<div class="checked" id="ui-id-5">5</div> 
<div class="checked" id="ui-id-6">6</div> 
<div class="checked" id="ui-id-7">7</div> 
<div class="checked" id="ui-id-8">8</div> 
<div class="checked" id="ui-id-9">9</div> 
<div class="checked" id="ui-id-10">10</div> 
<div class="checked" id="ui-id-11">11</div> 
<div class="checked" id="ui-id-12">12</div> 

Демо: http://jsfiddle.net/GCu2D/693/

Многие виджеты должны генерировать уникальные идентификаторы для элементов. .uniqueId() проверяет, имеет ли элемент идентификатор, а если нет, он будет генерировать один и установить его на элементе. Можно безопасно вызвать .uniqueId() на элемент без проверки, имеет ли он уже идентификатор. Если/когда виджет нужно очистить после себя, метод .removeUniqueId() удалит идентификатор из элемента, если он был добавлен .uniqueId(), и оставить его в покое, если это не так. .removeUniqueId() способен быть умным об этом, потому что сгенерированные идентификаторы имеют префикс «ui-id-».

+0

способ использования? посмотрите обновление – fatherazrael

+0

@fatherazrael Проверьте обновленный ответ –

0

Элементы имеют общий класс. Например, class="question". Затем вы можете настроить таргетинг на всех из них, используя $(".question"). Если у них есть уникальные идентификаторы, используйте ID для их индивидуальной настройки: id="question-1.1" и $("#question-1.1"). Если вы не можете использовать идентификаторы, назначьте два класса: class="question question-1.1", затем вы можете использовать $(".question") для всех или $(".question-1.1") для одного.

+0

Каждый вопрос находится в одной строке. Как (1.1 - Вы хотите птицу? ДА/НЕТ Комментарий) (1.2 - Вы хотите, чтобы Animal? Yes/No Comment). Каждый из этих 4 в отдельном div как div для 1.1 и div для вопроса и div для радио и div для комментариев. Таким образом, идентификаторы разделяются, как объясняется в вопросе. Поскольку вопрос имеет смешанную зависимость друг от друга, поэтому не может объявить одну девушку для всех. Индивидуальная идентификационная цель увеличит код без необходимости, добавив 30 вопросов. – fatherazrael

+0

У вас уже есть отдельные классы ('Class_1.1' или подобные); Согласование идентификаторов выполняется быстрее, чем сопоставление классов, поэтому, если 'Class_1.1' уникален на странице, предпочтительным будет преобразование в ID. – Amadan

+0

В Radio Divs невозможно использовать классы. Как в радиостанциях, мне нужно проверить, выбрано ли одно из них, отключить другие, поэтому мне нужно играть только по идентификаторам. Так что это не сработает для меня. – fatherazrael