gpt4 book ai didi

javascript - 所有按钮都具有相同的宽度 - jQuery

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:16 25 4
gpt4 key购买 nike

我正在编写一个计算器程序,我正在尝试让同一列中的所有按钮具有相同的宽度。为此,我使用 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() 来完成它,它会加载到正文中。知道我做错了什么吗?

谢谢大家,路易斯。

最佳答案

问题是理解元素的 jquery 表示和 javascript 中的“原始”元素之间的区别。

给定 var columna1 = $(".columna1"); 这意味着它将返回一个 jquery 对象,该对象是选择器 (.column1 在这种情况下)已指定。

当您遍历此 jquery 集合 (columna[i]) 时,您得到的不是元素的 jquery 表示,而是原始元素本身(或元素的 native javascript 表示) . native 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);
}

可能/应该是:

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);
}

最后的提示

我个人帮助/帮助自己记住我的 javascript 代码中的 jquery 对象,方法是在所有 jquery 对象的变量前加上 $,以免忘记它们。

所以这样:

var columna1 = $(".columna1");

会是:

var $columna1 = $(".columna1");

关于javascript - 所有按钮都具有相同的宽度 - jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44987005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com