将功能分别应用于所有项目
Apply function to all items individually?
我尝试使用 jQuery 动态调整输入字段的大小,我的函数工作但将相同的值应用于每个输入,而不是独立声明每个输入的宽度。谁能看出我可能做错了什么?
jQuery
function inputSize(){
var inputContainer = $('.input-style').width();
var labelWidth = $('.input-style label').width() + 40; // 40 is the padding + margin
var inputNewSize = inputContainer - labelWidth;
$('.input-style input').css('width', inputNewSize);
}
inputSize();
http://jsfiddle.net/r76cgn6a/
您可以轻松地将函数转换为 .each
的参数。只需根据情况将您的选择器更改为$(this)
或$(this).find
:
function inputSize(){
var inputContainer = $(this).width();
var labelWidth = $(this).find('label').width() + 40; // 40 is the padding + margin
var inputNewSize = inputContainer - labelWidth;
$(this).find('input').css('width', inputNewSize);
}
$('.input-style').each(inputSize);
小提琴
您的代码没有考虑每个input
元素的上下文;使用 this
引用目标父元素和label
元素。像这样使用.width(function() { .. })
:
$('.input-style input').width(function() {
return $(this).parent().width() - $(this).parent().find('label').width() - 40;
});
演示,演示
由于您可能不会重用定义的函数,因此您可能希望将代码更改为:
$(function() {
$('.input-style input').width(function() {
return $(this).parent().width() - $(this).parent().find('label').width() - 40;
});
});
演示
使用 $('.input-style').width() 将只采用第一个元素宽度。
如果有很多元素,那么你需要使用 .each 函数,然后在你的代码中使用 $(this),如下所示:
$(".input-style").each(function(index,item){
var inputContainer = $(this).width();
var labelWidth = $(this).find("label").width() + 40; // 40 is the padding + margin
var inputNewSize = inputContainer - labelWidth;
$(this).find("input").css('width', inputNewSize);
});
将代码更改为使用 .each 方法,该方法逐个获取同一 css 类的所有元素:
$(.input-style).each(function inputSize(){
var inputContainer = $('.input-style').width();
var labelWidth = $('.input-style label').width() + 40; // 40 is the padding + margin
var inputNewSize = inputContainer - labelWidth;
$('.input-style input').css('width', inputNewSize);
});
inputSize();
body {font-size:10px;}
.input-style {
background: #e7e7e7;
overflow: hidden;
padding: 10px;
}
.input-style label {
margin-right: 20px;
font-family:'Raleway', sans-serif;
font-weight: 400;
font-style: italic;
color: #818181;
font-size: 1.8em;
float: left;
}
label {
display: inline-block;
max-width: 100%;
margin-bottom: 5px;
font-weight: bold;
}
.input-style input {
margin-right: 20px;
font-family:'Raleway', sans-serif;
background:yellow;
font-weight: 400;
font-style: italic;
color: #818181;
font-size: 1.8em;
outline: 0;
padding: 0;
border: 0;
}
<div class="input-style">
<label>Name*</label>
<input data-val="true" data-val-length="The field name must be a string with a maximum length of 500." data-val-length-max="500" data-val-required="Please complete this field" id="Name" name="Name" required="required" type="text" value="">
</div>
<div class="input-style">
<label>Confirm Password*</label>
<input data-val="true" data-val-equalto="passwords do not match" data-val-equalto-other="*.Password" data-val-length="The field re-enter password must be a string with a maximum length of 50." data-val-length-max="50" data-val-required="Please complete this field" id="ComparePassword" name="ComparePassword" required="required" type="password" value="">
</div>
相关文章:
- 将函数的上下文应用于javascript变量
- 将CSS应用于printWindow.print();在Javascript中
- 如何将CSS(特别是填充/边距)应用于select下拉菜单的选项或optgroup
- $scope.apply()何时应用于angular
- Javascript非常简单:'阅读更多''显示较少'应用于Wordpress的功能
- 尝试应用于<tr>在ng单击中
- 如何将javascript仅应用于1个表单中的2个表单提交按钮中的1个
- 将脚本应用于Angular 2上的输入
- Json和$scope的角度之间的差异$eval应用于JSON字符串时
- 如何将参数应用于String.prototype.format函数
- 动态地将过滤器应用于 JSON.parse()
- $location更改不适用于ngchange,而是应用于ngclick
- 如何将 :empty 选择器应用于 XML 文档
- 如何仅在文本字段中有值时才将自定义过滤器应用于 ng-repeat
- 如何使用 JavaScript 将样式应用于 CKEditor 中的选定文本
- MongoDB 无法将$addToSet应用于 Meteor JS 中的非数组
- 将类应用于jquery ui对话框
- 将CSS应用于在JavaScript中创建的表-表的位置不正确
- 将jquery插件应用于angularJS ng repeat中的新项目
- 将JS的删除线应用于ng-repeat中的项目