所有按钮的宽度都相同 - jQuery
All buttons have same width - jQuery
我正在编写一个计算器,我正在尝试让同一列中的所有按钮具有相同的宽度。为此,我使用 jQuery(我这样做是因为我有几天要考试,我想练习)。
我的HTML代码:
<html>
<head>
<meta charset="UTF-8">
<title>CORE2017 P3</title>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="calculadora.js"></script>
<link href="calculadora.css" rel="stylesheet" type="text/css" media="all">
</head>
<body onload="igualarBotones()">
<header>
<p>Calculator</p>
</header>
<section id="main">
<p>
Número: <input type="text" id="pantalla"> <button id="Limpiar">Limpiar</button>
</p>
<p>
<button id="suma" class="columna1">+</button>
<button id="resta" class="columna2">-</button>
<button id="cuadrado" class="columna3">x<sup>2</sup></button>
</p>
<p>
<button id="inverso" class="columna1">1/x</button>
<button id="raiz" class="columna2">sqrt(x)</button>
<button id="pentera" class="columna3">parte_entera(x)</button>
</p>
<p>
<button id="potencia2" class="columna1">2<sup>x</sup></button>
<button id="factorial" class="columna2">x!</button>
<button id="igual" class="columna3">=</button>
</p>
</section>
</body>
</html>
我的JavaScript代码:
$(function() {
function igualarBotones(){
var columna1 = $(".columna1");
setMax(columna1);
var columna2 = $(".columna2");
setMax(columna2);
var columna3 = $(".columna3");
setMax(columna3);
}
function setMax(columna){
var maxColumna = -1;
for(i=0; i<columna.length; i++){
if(columna[i].css("width") > maxColumna){
maxColumna = columna[i].css("width");
}
}
for(i=0; i<columna.length; i++){
columna[i].css("width",maxColumna);
}
}
});
有人知道为什么它不起作用吗?
编辑:我使用 $(columna[i]).css
而不是 columna[i].css
并且有效。但是我没有实现我的函数 igualarBotones()
在加载正文时被定义,我认为这一定与我命名或编写函数的方式有关。如果我这样写 Javascript:
$(function() {
var columna1 = $(".columna1");
setMax(columna1);
var columna2 = $(".columna2");
setMax(columna2);
var columna3 = $(".columna3");
setMax(columna3);
function setMax(columna){
var maxColumna = -1;
for(i=0; i<columna.length; i++){
if(parseFloat($(columna[i]).css("width")) > parseFloat(maxColumna)){
maxColumna = $(columna[i]).css("width");
}
}
columna.css("width",maxColumna);
}
});
它可以工作,但我想用一个函数 igualarBotones()
来完成它,它会加载到正文中。知道我做错了什么吗?
谢谢大家,路易斯。
我不熟悉原版 javascript 中的 .css 函数。我改变了它,所以它会调用 jQuery .css 函数。此外,至少在笔中,函数在加载主体时未定义。您找到最大尺寸的方式仍然存在问题,但这应该可以帮助您入门。
function igualarBotones(){
var columna1 = $(".columna1");
setMax(columna1);
var columna2 = $(".columna2");
setMax(columna2);
var columna3 = $(".columna3");
setMax(columna3);
}
function setMax(columna){
var maxColumna = -1;
for(var i=0; i<columna.length; i++){
if($(columna[i]).css("width") > maxColumna){
maxColumna = $(columna[i]).css("width");
}
}
for(i=0; i<columna.length; i++){
$(columna[i]).css("width",maxColumna);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
<meta charset="UTF-8">
<title>CORE2017 P3</title>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="calculadora.js"></script>
<link href="calculadora.css" rel="stylesheet" type="text/css" media="all">
</head>
<body onload="igualarBotones();">
<header>
<p>Calculator</p>
</header>
<section id="main">
<p>
Número: <input type="text" id="pantalla"> <button id="Limpiar">Limpiar</button>
</p>
<p>
<button id="suma" class="columna1">+</button>
<button id="resta" class="columna2">-</button>
<button id="cuadrado" class="columna3">x<sup>2</sup></button>
</p>
<p>
<button id="inverso" class="columna1">1/x</button>
<button id="raiz" class="columna2">sqrt(x)</button>
<button id="pentera" class="columna3">parte_entera(x)</button>
</p>
<p>
<button id="potencia2" class="columna1">2<sup>x</sup></button>
<button id="factorial" class="columna2">x!</button>
<button id="igual" class="columna3">=</button>
</p>
</section>
</body>
</html>
问题是了解 jquery 元素表示与 javascript 中的 "raw" 元素之间的差异。
给定 var columna1 = $(".columna1");
这意味着它将 return 一个 jquery 对象,它是选择器(.column1
在这种情况下)的所有元素的集合已指定。
当您遍历此 jquery 集合 (columna[i]
) 时,您不会得到元素的 jquery 表示,但实际上是原始元素本身(或本机 javascript 表示元素)。本机 javascript 元素没有 .css 函数。
所以当你通过这样做 $(columna[i])
将每个元素包裹在 $(...)
周围时,你将再次处理每个元素的 jquery 表示,因此你可以使用.css。这就是为什么前者不起作用而后者起作用的原因。
额外建议
既然你正在学习 jquery 让我补充一下:Jquery 有一个 .each 函数,你应该实际使用它来循环遍历包含元素的 jquery 对象.
所以这个函数:
function setMax(columna){
var maxColumna = -1;
for(i=0; i<columna.length; i++){
if(parseFloat($(columna[i]).css("width")) > parseFloat(maxColumna)){
maxColumna = $(columna[i]).css("width");
}
}
columna.css("width",maxColumna);
}
Could/Should 为:
function setMax(columna){
var maxColumna = -1;
columna.each(function(){
// note the use of "this" to represent each
// element currently being iterated over.
// this = raw element, $(this) = jquery object representing element.
if(parseFloat($(this).css("width")) > parseFloat(maxColumna)){
maxColumna = $(this).css("width");
}
});
columna.css("width",maxColumna);
}
最后提示
我个人 assist/help 我自己通过在 jquery 对象的所有变量前加上 $
来记住我 javascript 代码中的 jquery 对象,以免忘了他们吧。
所以这个:
var columna1 = $(".columna1");
将是:
var $columna1 = $(".columna1");
我正在编写一个计算器,我正在尝试让同一列中的所有按钮具有相同的宽度。为此,我使用 jQuery(我这样做是因为我有几天要考试,我想练习)。
我的HTML代码:
<html>
<head>
<meta charset="UTF-8">
<title>CORE2017 P3</title>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="calculadora.js"></script>
<link href="calculadora.css" rel="stylesheet" type="text/css" media="all">
</head>
<body onload="igualarBotones()">
<header>
<p>Calculator</p>
</header>
<section id="main">
<p>
Número: <input type="text" id="pantalla"> <button id="Limpiar">Limpiar</button>
</p>
<p>
<button id="suma" class="columna1">+</button>
<button id="resta" class="columna2">-</button>
<button id="cuadrado" class="columna3">x<sup>2</sup></button>
</p>
<p>
<button id="inverso" class="columna1">1/x</button>
<button id="raiz" class="columna2">sqrt(x)</button>
<button id="pentera" class="columna3">parte_entera(x)</button>
</p>
<p>
<button id="potencia2" class="columna1">2<sup>x</sup></button>
<button id="factorial" class="columna2">x!</button>
<button id="igual" class="columna3">=</button>
</p>
</section>
</body>
</html>
我的JavaScript代码:
$(function() {
function igualarBotones(){
var columna1 = $(".columna1");
setMax(columna1);
var columna2 = $(".columna2");
setMax(columna2);
var columna3 = $(".columna3");
setMax(columna3);
}
function setMax(columna){
var maxColumna = -1;
for(i=0; i<columna.length; i++){
if(columna[i].css("width") > maxColumna){
maxColumna = columna[i].css("width");
}
}
for(i=0; i<columna.length; i++){
columna[i].css("width",maxColumna);
}
}
});
有人知道为什么它不起作用吗?
编辑:我使用 $(columna[i]).css
而不是 columna[i].css
并且有效。但是我没有实现我的函数 igualarBotones()
在加载正文时被定义,我认为这一定与我命名或编写函数的方式有关。如果我这样写 Javascript:
$(function() {
var columna1 = $(".columna1");
setMax(columna1);
var columna2 = $(".columna2");
setMax(columna2);
var columna3 = $(".columna3");
setMax(columna3);
function setMax(columna){
var maxColumna = -1;
for(i=0; i<columna.length; i++){
if(parseFloat($(columna[i]).css("width")) > parseFloat(maxColumna)){
maxColumna = $(columna[i]).css("width");
}
}
columna.css("width",maxColumna);
}
});
它可以工作,但我想用一个函数 igualarBotones()
来完成它,它会加载到正文中。知道我做错了什么吗?
谢谢大家,路易斯。
我不熟悉原版 javascript 中的 .css 函数。我改变了它,所以它会调用 jQuery .css 函数。此外,至少在笔中,函数在加载主体时未定义。您找到最大尺寸的方式仍然存在问题,但这应该可以帮助您入门。
function igualarBotones(){
var columna1 = $(".columna1");
setMax(columna1);
var columna2 = $(".columna2");
setMax(columna2);
var columna3 = $(".columna3");
setMax(columna3);
}
function setMax(columna){
var maxColumna = -1;
for(var i=0; i<columna.length; i++){
if($(columna[i]).css("width") > maxColumna){
maxColumna = $(columna[i]).css("width");
}
}
for(i=0; i<columna.length; i++){
$(columna[i]).css("width",maxColumna);
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
<meta charset="UTF-8">
<title>CORE2017 P3</title>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="calculadora.js"></script>
<link href="calculadora.css" rel="stylesheet" type="text/css" media="all">
</head>
<body onload="igualarBotones();">
<header>
<p>Calculator</p>
</header>
<section id="main">
<p>
Número: <input type="text" id="pantalla"> <button id="Limpiar">Limpiar</button>
</p>
<p>
<button id="suma" class="columna1">+</button>
<button id="resta" class="columna2">-</button>
<button id="cuadrado" class="columna3">x<sup>2</sup></button>
</p>
<p>
<button id="inverso" class="columna1">1/x</button>
<button id="raiz" class="columna2">sqrt(x)</button>
<button id="pentera" class="columna3">parte_entera(x)</button>
</p>
<p>
<button id="potencia2" class="columna1">2<sup>x</sup></button>
<button id="factorial" class="columna2">x!</button>
<button id="igual" class="columna3">=</button>
</p>
</section>
</body>
</html>
问题是了解 jquery 元素表示与 javascript 中的 "raw" 元素之间的差异。
给定 var columna1 = $(".columna1");
这意味着它将 return 一个 jquery 对象,它是选择器(.column1
在这种情况下)的所有元素的集合已指定。
当您遍历此 jquery 集合 (columna[i]
) 时,您不会得到元素的 jquery 表示,但实际上是原始元素本身(或本机 javascript 表示元素)。本机 javascript 元素没有 .css 函数。
所以当你通过这样做 $(columna[i])
将每个元素包裹在 $(...)
周围时,你将再次处理每个元素的 jquery 表示,因此你可以使用.css。这就是为什么前者不起作用而后者起作用的原因。
额外建议
既然你正在学习 jquery 让我补充一下:Jquery 有一个 .each 函数,你应该实际使用它来循环遍历包含元素的 jquery 对象.
所以这个函数:
function setMax(columna){
var maxColumna = -1;
for(i=0; i<columna.length; i++){
if(parseFloat($(columna[i]).css("width")) > parseFloat(maxColumna)){
maxColumna = $(columna[i]).css("width");
}
}
columna.css("width",maxColumna);
}
Could/Should 为:
function setMax(columna){
var maxColumna = -1;
columna.each(function(){
// note the use of "this" to represent each
// element currently being iterated over.
// this = raw element, $(this) = jquery object representing element.
if(parseFloat($(this).css("width")) > parseFloat(maxColumna)){
maxColumna = $(this).css("width");
}
});
columna.css("width",maxColumna);
}
最后提示
我个人 assist/help 我自己通过在 jquery 对象的所有变量前加上 $
来记住我 javascript 代码中的 jquery 对象,以免忘了他们吧。
所以这个:
var columna1 = $(".columna1");
将是:
var $columna1 = $(".columna1");