2011-01-05 2 views
7

Я использую функцию JQuery клонировать DIV, который содержит набор входных элементов:Изменить ярлык для атрибута

<div class="history-form-fields"> 

<div class="row"> 
    <label for="History_0_type">Type</label> 
    <select name="History[0][type]" id="History_0_type"> 
    <option value="">Select</option> 
    </select> 
</div> 

<div class="row"> 
    <label for="History_0_name">Name</label> 
    <input type="text" name="History[0][name]" id="History_0_name" /> 
</div> 

<div class="row"> 
    <label for="History_0_year">Year</label> 
    <select name="History[0][year]" id="History_0_year"> 
    <option value="">Select</option> 
    </select> 
</div> 

</div> 

<input id="addAnother" type="button" value="Add Another" /> 

Когда DIV получает клонированные тег входных элементов NAME и ID должны быть изменены так что мы можем идентифицировать данные в сценарии на стороне сервера.

У меня есть следующий код, который клонирует DIV и модифицирует ВХОД и ВЫБРАТЬ метки:

var counter = 0; 

$('#addAnother').click(function(){ 
    var divCloned = $('.history-form-fields:first').clone(); 
    divCloned.insertAfter('.history-form-fields:last'); 
    initNewInputs(divCloned.children('.row'), ++counter); 
}); 

function initNewInputs(divs, idNumber) 
{  
    var inputs = divs.children('input, select').get(); // find all the INPUT and SELECT tags 

    for(var i in inputs) 
    { 
     inputs[i].id = inputs[i].id.replace(/\d+/, idNumber); 
     inputs[i].name = inputs[i].name.replace(/\d+/, idNumber); 
    } 
} 

Однако у меня возникли проблемы, изменяющий LABEL атрибутов. Кто-нибудь знает, как это сделать?

ответ

13

С for - это ключевое слово Javascript, атрибут HTML for отображается в свойстве htmlFor в Javascript.

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

divs.children('label').attr('for', 
    function(index, old) { return old.replace(/\d+/, idNumber); } 
); 
+0

Cheers mate. Можно ли заменить «входы» для цикла так? – GSTAR

+1

@GSTAR: Да, это возможно. Однако вам понадобятся два вызова 'attr'. Возможно, вы захотите написать 'var replacer = function (index, old) {return old.replace (/ \ d + /, idNumber); }; 'и передать это. – SLaks

+0

Привет, SLaks - еще один вопрос - во время изменения атрибута FOR я также хочу добавить атрибут 'class' к тому же тегу метки (используя функцию attr()) - любой способ интегрировать это в этот новый код? – GSTAR

1

атрибутов тега может быть доступен через функцию .attr().

1

Я вижу, что у вас уже есть приемлемый ответ на javascript ... но другой способ справиться с этим - это изменить ваш html. Если вы перемещаете вход и выбираете элементы управления внутри метки, вам не нужно будет устанавливать атрибут «для».

<div class="history-form-fields"> 
    <div class="row"> 
     <label> 
      Type 
      <select name="History[0][type]" id="History_0_type"> 
       <option value="">Select</option> 
      </select> 
     </label> 
    </div> 
    <div class="row"> 
     <label> 
      Name 
      <input type="text" name="History[0][name]" id="History_0_name" /> 
     </label> 
    </div> 
    <div class="row"> 
     <label> 
      Year 
      <select name="History[0][year]" id="History_0_year"> 
       <option value="">Select</option> 
      </select> 
     </label> 
    </div> 
</div> 
+0

Хорошая идея ... это то, что Valid Markup? – GSTAR

+0

Я просто попытался использовать http://validator.w3.org ... и он прошел проверку ... –

Смежные вопросы