将表单输入更改为在元素复制时只读
Changing form input to read only when elements reproduced
所以我在jQuery方面一无所知,只是继承了别人的代码。任何帮助将不胜感激。
我有一个表单,该表单在将学生添加到表单时从查询填充。他们可以将任意数量的学生添加到表单中。下面是 html:
<table style="width:100%">
<tr>
<td colspan="2">
<label class="control-label" >Name</label>
<input type="text" name="name[]" value="" class="required" style="width: 290px">
</td>
<td colspan="2">
<label class="control-label" >Email</label>
<input type="text" name="email[]" value="" class="required">
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label" >Address</label>
<input type="text" name="address1[]" value="" class="required" style="width: 290px">
</td>
<td colspan="2">
<label class="control-label" >Address 2 <small>(optional)</small></label>
<input type="text" name="address2[]" value="">
</td>
</tr>
<tr>
<td colspan="1">
<label class="control-label" >City</label>
<input type="text" name="city[]" value="" style="width:120px;" class="required">
</td>
<td>
<label class="control-label" >State/Providence</label>
<input type="text" name="st_prov[]" value="" style="width:120px;" class="required">
</td>
<td>
<label class="control-label" >Postal Code</label>
<input type="text" name="zip_pc[]" value="" style="width:60px;" class="required">
</td>
<td>
<label class="control-label" >Country</label>
<input type="text" name="country[]" value="" class="required">
</td>
</tr>
<tr><td colspan="4"> </td></tr>
</table>
这是我一直在尝试修改的jQuery函数:
jQuery(function($){
var addStudent = function(data){
var studentEl = $($('.student').get(0)).clone()
studentEl.find('input').each(function(){
var field = $(this).attr('name').replace('[]','')
if ($(this).attr("name").val == 'name'){
$(this).prop("readonly", true);
}
$(this).val(data[field] || '')
})
if(data.client_no!=''){
studentEl.find('.will_update').text("Will update student information for "+data.name+'')
}
$($('.student').last()).after(studentEl)
}
})
该函数为数据库填充的每个学生创建一组附加字段,以便表单处理。
我希望将"name"的特定字段修改为只读(可以查看但不能修改但仍提交)。我已经尝试了许多其他迭代,但无法在 if 子句中获取字段名称以仅将该字段设置为只读。
提供的任何帮助都会很棒。
通过 jQuery 获取属性的正确方法只是$(this).attr("name")
:
也不要使用:
var field = $(this).attr('name').replace('[]','')
if ($(this).attr("name").val == 'name'){
$(this).prop("readonly", true);
}
使用已创建的变量field
:
var field = $(this).attr('name').replace('[]','')
if (field == 'name'){
$(this).prop("readonly", true);
}
请参阅下面的片段:
jQuery(function($) {
var addStudent = function(data) {
var studentEl = $($('.student').get(0)).clone()
studentEl.find('input').each(function() {
var field = $(this).attr('name').replace('[]', '')
if (field == 'name') {
$(this).prop("readonly", true);
}
$(this).val(data[field] || '')
})
if (data.client_no != '') {
studentEl.find('.will_update').text("Will update student information for " + data.name + '')
}
$($('.student').last()).after(studentEl)
}
$('button').click(function() {
addStudent({
client_no: 1,
name: "Ralph John "
})
});
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table style="width:100%" class="student">
<tr>
<td colspan="2">
<label class="control-label">Name</label>
<input type="text" name="name[]" value="" class="required" style="width: 290px">
</td>
<td colspan="2">
<label class="control-label">Email</label>
<input type="text" name="email[]" value="" class="required">
</td>
</tr>
<tr>
<td colspan="2">
<label class="control-label">Address</label>
<input type="text" name="address1[]" value="" class="required" style="width: 290px">
</td>
<td colspan="2">
<label class="control-label">Address 2 <small>(optional)</small>
</label>
<input type="text" name="address2[]" value="">
</td>
</tr>
<tr>
<td colspan="1">
<label class="control-label">City</label>
<input type="text" name="city[]" value="" style="width:120px;" class="required">
</td>
<td>
<label class="control-label">State/Providence</label>
<input type="text" name="st_prov[]" value="" style="width:120px;" class="required">
</td>
<td>
<label class="control-label">Postal Code</label>
<input type="text" name="zip_pc[]" value="" style="width:60px;" class="required">
</td>
<td>
<label class="control-label">Country</label>
<input type="text" name="country[]" value="" class="required">
</td>
</tr>
<tr>
<td colspan="4"> </td>
</tr>
</table>
<button>Add Student</button>
代码中的几个问题。
使用$('student').eq(0)
而不是$($('.student').get(0))
你从jquery对象获取dom元素,并将其重新包装到jquery对象中。eq(index)
函数返回一个 jquery 包装的元素。
您正在尝试从返回字符串的 attr("name")
获取 val
属性。你会得到未定义。
if ($(this).attr("name").val == 'name'){
$(this).prop("readonly", true);
}
如果您尝试查找 name 属性的存在,只需执行
if ($(this).attr("name")){
$(this).prop("readonly", true);
}
最后,你不需要用jquery对象重新包装jquery对象。
$($('.student').last())
Jquery 函数返回 jquery 对象,这意味着您可以链接调用,并且不需要重新包装它。
$('.student').last()
您可以按如下方式修改代码。假设你的表有类student
这里有一个工作演示 - 小提琴。
$(function(){
var addStudent = function(data){
var studentEl = $('.student tr:first').clone();
studentEl.find('input').each(function(){
var field = $(this).attr('name').replace('[]','');
if (field === 'name'){
$(this).prop("readonly", true);
}
$(this).val(data[field] || '')
})
if(data.client_no !== ''){
studentEl.find('.will_update').text("Will update student information for "+data.name+'')
}
$('.student').last().after(studentEl)
}
});
相关文章:
- 使用javascript代码将HTML元素复制到剪贴板
- 使用jQuery将属性从一个元素复制到另一个元素
- 将现有数组的元素复制到新数组而不使用拼接
- 独立于原始元素复制元素
- 将表单输入更改为在元素复制时只读
- Jquery - 单击以将父元素复制到文本字段
- 如何使用 JavaScript 将网页的元素复制到其他网页
- 如何使用事件处理程序将一个元素复制到另一个元素
- 如何将文本从一个元素复制和修改到另一个元素
- javascript将文本从元素复制到文本区域
- Zclip Open只单击了类/从下一个元素复制
- JQuery如何点击html元素复制到文本区
- 按Return键时,TinyMce从当前块元素复制类
- 将dateTime文本从一个元素复制到另一个元素
- Insert使用GSAP将SVG元素复制到DOM中
- 如何制作一个干净的脚本,而不是为每个元素复制相同的脚本
- 循环遍历Google Doc中的所有元素复制到新页面
- 将值从一个元素复制到另一个元素
- 将二维数组的元素复制到另一个二维数组中
- 为什么't子选择's和输入's将HTML从一个元素复制到另一个元素时不保留