我有一个表单,允许用户输入多个委托,details.Here是html页面的片段。
<div id="Delegate1" class="clonedInput">
<h4 id="reference" name="reference" class="heading-reference">Delegate #1</h4>
<div class="w-row">
<div class="column-5 w-col w-col-6"><label for="email-5">*First Name:</label>
<input type="text" class="w-input" maxlength="256" name="first_name" data-name="first_name" placeholder="First Name" id="first_name" required=""></div>
<div class="column-4 w-col w-col-6"><label for="email-5">*Last Name:</label>
<input type="text" class="w-input" maxlength="256" name="last_name" data-name="last_name" placeholder="Last Name" id="last_name" required=""></div>
</div><label for="email-5">*Job Title / Position</label>
<select id="title" name="title" class="w-select">
<option value="">What best describes your role?</option>
<option value="Partner/Principal">Partner/Principal</option>
<option value="Director/CEO/CFO">Director/CEO/CFO</option>
<option value="General Manager">General Manager</option>
<option value="Senior Manager">Senior Manager</option>
<option value="Manager">Manager</option>
</select>
<div class="w-row">
<div class="column-10 w-col w-col-6"><label for="email-5">*Email Address</label>
<input type="email" class="w-input" maxlength="256" name="email_address" data-name="email_address" placeholder="Email Address" id="email_address" required=""></div>
<div class="column-11 w-col w-col-6"><label for="email-5">Mobile</label>
<input type="text" class="w-input" maxlength="256" name="mobile" data-name="mobile" placeholder="Mobile Number" id="mobile"></div>
</div>
<label for="email-5">*Postal Address</label>
<input type="text" class="w-input" maxlength="256" name="mailing_street" data-name="mailing_street" placeholder="Postal Address" id="mailing_street" required="">
<div class="w-row">
<div class="column w-col w-col-4"><label for="Suburb">*Suburb</label>
<input type="text" class="w-input" maxlength="256" name="mailing_suburb" data-name="mailing_suburb" placeholder="Enter your email" id="mailing_suburb" required=""></div>
<div class="column-2 w-col w-col-4"><label for="email-5">*State</label>
<input type="text" class="w-input" maxlength="256" name="mailing_state" data-name="mailing_state" placeholder="State" id="mailing_state" required=""></div>
<div class="column-3 w-col w-col-4"><label for="email-5">*Postcode</label>
<input type="text" class="w-input" maxlength="256" name="mailing_postcode" data-name="mailing_postcode" placeholder="Postcode" id="mailing_postcode" required=""></div>
</div>
<label for="email-5">Please note any special requirements (eg. dietary, mobility, hearing or sight)</label>
<input type="text" class="w-input" maxlength="256" name="message" data-name="message" placeholder="Special Requirements" id="message">
</div>
<div class="w-row">
<div class="column-6 w-col w-col-6"><button type="button" id="btnAdd" class="delegate-button w-button">Add New Delegate</button></div>
<div class="column-7 w-col w-col-6"><button type="button" id="btnDel" class="delegate-button remove w-button">Remove Above Delegate</button></div>
</div>现在,当我单击addbtn时,它将克隆一组新的委托字段,我必须将克隆的元素的id和名称更改为后端的特定格式,以处理表单,我正在使用jquery进行此操作。
$(function() {
$('#btnAdd').click(function() {
var num = $('.clonedInput').length,
newNum = new Number(num + 1),
newElem = $('#Delegate' + num).clone().attr('id', 'Delegate' + newNum).fadeIn('slow');
newElem.find('.heading-reference').attr('id', 'ID' + newNum + '_reference').attr('name', 'ID' + newNum + '_reference').html('Delegate #' + newNum);
newElem.find('.w-select').attr('id', 'ID' + newNum + '_title').attr('name', 'ID' + newNum + '_title').val('');
newElem.find('.w-input').attr('id', 'ID' + newNum + '_first_name').attr('name', 'ID' + newNum + '_first_name').val('');
newElem.find('.w-input').attr('id', 'ID' + newNum + '_last_name').attr('name', 'ID' + newNum + '_last_name').val('');
newElem.find('.w-input').attr('id', 'ID' + newNum + '_email_address').attr('name', 'ID' + newNum + '_email_address').val('');
newElem.find('.w-input').attr('id', 'ID' + newNum + '_mobile').attr('name', 'ID' + newNum + '_mobile').val('');
newElem.find('.w-input').attr('id', 'ID' + newNum + '_message').attr('name', 'ID' + newNum + '_message').val('');
$('#Delegate' + num).after(newElem);
$('#ID' + newNum + '_title').focus();
$('#btnDel').attr('disabled', false);
if (newNum == 5)
$('#btnAdd').attr('disabled', true).prop('value', "You've reached the limit");
$('#number_of_delegate').val(newNum);
});我能够成功地更改标题引用的属性,但是我无法获取输入字段属性,因为它们属于同一个类‘w-输入’。我在这里做错什么了?提前感谢!
发布于 2018-03-14 00:39:59
因为您的目标是.w-input,而且它们是该类的多个元素,所以您要针对该类的所有元素。如果您是console.log('newElem.find('.w-input')),您将收到一个数组。通过迭代每个元素,您可以分别针对它们,对字符串中的一个数字使用regex测试,并相应地进行替换。
解决方案:
$('#btnAdd').click(function () {
var num = $('.clonedInput').length,
newNum = new Number(num + 1),
newElem = $('#Delegate' + num).clone().attr('id', 'Delegate' + newNum).fadeIn('slow');
newElem.find('.heading-reference').attr('id', 'ID' + newNum + '_reference').attr('name', 'ID' + newNum + '_reference').html('Delegate #' + newNum);
newElem.find('.w-select').attr('id', 'ID' + newNum + '_title').attr('name', 'ID' + newNum + '_title').val('');
//loop through each element
newElem.find('.w-input').each(function(el) {
var currentId = $(this).attr('id');
var uniqueId; //hold a var for the unique id
if(/(\d+)/.test(currentId)) { //if digits exist
uniqueId = currentId.replace(/(\d+)/, newNum); //replace digits with the new number
} else {
uniqueId = 'ID' + newNum + '_' + currentId; //otherwise, replace with current id plus number etc.
}
$(this).attr('id', uniqueId).attr('name', uniqueId).val(''); //the the name and id to the new unique id
});
$('#Delegate' + num).after(newElem);
$('#ID' + newNum + '_title').focus();
$('#btnDel').attr('disabled', false);
if (newNum == 5)
$('#btnAdd').attr('disabled', true).prop('value', "You've reached the limit");
$('#number_of_delegate').val(newNum);
});片段
$(function () {
$('#btnAdd').click(function () {
var num = $('.clonedInput').length,
newNum = new Number(num + 1),
newElem = $('#Delegate' + num).clone().attr('id', 'Delegate' + newNum).fadeIn('slow');
newElem.find('.heading-reference').attr('id', 'ID' + newNum + '_reference').attr('name', 'ID' + newNum + '_reference').html('Delegate #' + newNum);
newElem.find('.w-select').attr('id', 'ID' + newNum + '_title').attr('name', 'ID' + newNum + '_title').val('');
newElem.find('.w-input').each(function(el) {
var currentId = $(this).attr('id');
var uniqueId;
if(/(\d+)/.test(currentId)) {
uniqueId = currentId.replace(/(\d+)/, newNum);
} else {
uniqueId = 'ID' + newNum + '_' + currentId;
}
$(this).attr('id', uniqueId).attr('name', uniqueId).val('');
});
$('#Delegate' + num).after(newElem);
$('#ID' + newNum + '_title').focus();
$('#btnDel').attr('disabled', false);
if (newNum == 5)
$('#btnAdd').attr('disabled', true).prop('value', "You've reached the limit");
$('#number_of_delegate').val(newNum);
});
})<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="Delegate1" class="clonedInput">
<h4 id="reference" name="reference" class="heading-reference">Delegate #1</h4>
<div class="w-row">
<div class="column-5 w-col w-col-6"><label for="email-5">*First Name:</label>
<input type="text" class="w-input" maxlength="256" name="first_name" data-name="first_name"
placeholder="First Name" id="first_name" required=""></div>
<div class="column-4 w-col w-col-6"><label for="email-5">*Last Name:</label>
<input type="text" class="w-input" maxlength="256" name="last_name" data-name="last_name"
placeholder="Last Name" id="last_name" required=""></div>
</div>
<label for="email-5">*Job Title / Position</label>
<select id="title" name="title" class="w-select">
<option value="">What best describes your role?</option>
<option value="Partner/Principal">Partner/Principal</option>
<option value="Director/CEO/CFO">Director/CEO/CFO</option>
<option value="General Manager">General Manager</option>
<option value="Senior Manager">Senior Manager</option>
<option value="Manager">Manager</option>
</select>
<div class="w-row">
<div class="column-10 w-col w-col-6"><label for="email-5">*Email Address</label>
<input type="email" class="w-input" maxlength="256" name="email_address" data-name="email_address"
placeholder="Email Address" id="email_address" required=""></div>
<div class="column-11 w-col w-col-6"><label for="email-5">Mobile</label>
<input type="text" class="w-input" maxlength="256" name="mobile" data-name="mobile"
placeholder="Mobile Number" id="mobile"></div>
</div>
<label for="email-5">*Postal Address</label>
<input type="text" class="w-input" maxlength="256" name="mailing_street" data-name="mailing_street"
placeholder="Postal Address" id="mailing_street" required="">
<div class="w-row">
<div class="column w-col w-col-4"><label for="Suburb">*Suburb</label>
<input type="text" class="w-input" maxlength="256" name="mailing_suburb" data-name="mailing_suburb"
placeholder="Enter your email" id="mailing_suburb" required=""></div>
<div class="column-2 w-col w-col-4"><label for="email-5">*State</label>
<input type="text" class="w-input" maxlength="256" name="mailing_state" data-name="mailing_state"
placeholder="State" id="mailing_state" required=""></div>
<div class="column-3 w-col w-col-4"><label for="email-5">*Postcode</label>
<input type="text" class="w-input" maxlength="256" name="mailing_postcode" data-name="mailing_postcode"
placeholder="Postcode" id="mailing_postcode" required=""></div>
</div>
<label for="email-5">Please note any special requirements (eg. dietary, mobility, hearing or sight)</label>
<input type="text" class="w-input" maxlength="256" name="message" data-name="message"
placeholder="Special Requirements" id="message">
</div>
<div class="w-row">
<div class="column-6 w-col w-col-6">
<button type="button" id="btnAdd" class="delegate-button w-button">Add New Delegate</button>
</div>
<div class="column-7 w-col w-col-6">
<button type="button" id="btnDel" class="delegate-button remove w-button">Remove Above Delegate</button>
</div>
</div>
https://stackoverflow.com/questions/49267698
复制相似问题