【问题标题】:Padding change via JS通过 JS 进行填充更改
【发布时间】:2018-10-14 00:40:40
【问题描述】:

我需要将 padding-bottom 从 -50% 更改为 -40% 所以,这是我的 CSS 代码

.mid {
    background-color: rgba(255,205,147,0.68);
    border-radius: 25px;
    margin-top: 18%;
    margin-right: 10%;
    margin-left: 10%;   
    padding-top: 50%;
    padding-bottom: -40%;
    background-attachment: fixed;
    box-shadow: 9px -12px 5px rgba(0,0,0,0.5);
}

这是我的 JS 代码

var expandMid = document.getElementsByClassName("mid");
function buttonReady() {
    if (expandMid.style.padding-bottom == -40%)
        {
    mid.style.padding-bottom == -30%;
        }
        else {
        mid.style.padding-bottom = -40%;
        }
   }

这是我在浏览器控制台中看到的内容

 Failed to load resource: net::ERR_FILE_NOT_FOUND
scripts.js:3 Uncaught SyntaxError: Unexpected token )
8index.html:72 Uncaught ReferenceError: buttonReady is not defined
    at HTMLButtonElement.onclick (index.html:72)

【问题讨论】:

  • 您在控制台中看到哪些错误?
  • 在 JS 第 3 行 - 缺少“使用严格”语句。第 4 行 - 预期“)”,而不是看到 { 第 5 行 - 预期“{”,而不是看到“中间” 第 7 行 - 预期 inedtifier,而不是看到“else” 第 8 行 - 错误分配

标签: javascript css padding


【解决方案1】:

由于破折号在 javascript 标识符中是不合法的,因此您需要使用 camelCase 而不是 kebab-case 作为样式名称,如下所示:

expandMid.style.paddingBottom

另外,您的变量名似乎有误。有时,该元素称为expandMid,有时称为mid

【讨论】:

  • 使用骆驼皮。无论如何,那是行不通的。你是什​​么意思变量命名错误?我必须改变什么变量?
【解决方案2】:

希望这项工作。您在“expandMid”中保存“mid”参考,但直接使用“mid”。

var expandMid = document.getElementsByClassName("mid");
function buttonReady() {
    if (expandMid.style.paddingBottom == -40%){
          expandMid.style.paddingBottom == -30%;
        }
        else {
          expandMid.style.paddingBottom = -40%;
        }
   }

【讨论】:

  • 嗯。您能否检查一下您是否正确包含了 javascript 文件。因为现在您的 html 代码找不到“buttonReady”功能。 未捕获的 ReferenceError: buttonReady 未定义
  • @Limondero 在您的 script.js 文件中的第 3 行存在语法错误。 “scripts.js:3 Uncaught SyntaxError: Unexpected token )”
  • 好的,我发现它不起作用,因为无法读取 null 的属性 'addEventListener'
【解决方案3】:

我发现您的代码至少有三处错误:

  1. 您似乎没有运行您创建的函数。声明后,您需要使用buttonReady(); 运行它
  2. 运行函数后,您会在浏览器的控制台中看到一个错误,因为 Javascript 变量的名称中不允许包含破折号。
  3. 您需要将-30%-40% 放在引号内。 - 字符被 Javascript 视为减法运算符,% 字符被视为模运算符。如果您尝试比较字符串,则需要这样对待它们。

我还发现您尝试解决问题的方式存在一些问题:

  1. getElementsByClassName 将返回一个事物列表,即使您的页面上只有其中一个事物。您需要为该函数提供不同的输入,或者使用不同的函数,或者需要
  2. 您在某些地方有一个名为mid 的变量,但在其他地方有一个expandMid。这是有效的 Javascript 代码(因为未提前声明的变量将被假定为附加到 window),但在运行它时会导致错误,因为窗口上不存在该变量。

【讨论】:

  • 最后,如果在提问时附上控制台的错误输出,或指向您已经尝试过的其他 StackOverflow 问题的链接,或者任何其他不仅仅是“它没有工作”。
【解决方案4】:

您遇到语法错误。因为在 JS 中你不能使用一些特殊字符并假设它们会正常工作。因此,-(减号)字符是一个特殊的数学运算符。你可以在CSS 中使用,但不能在 JS 中使用!

因此,如果您想访问具有特殊字符的内容(例如 css 的样式属性),请将属性写为驼峰式。

expandMid.style.paddingBottom // would give you the access.

注意paddingBottom 的值应该是一个字符串。不是数字。因此,用于比较:if (expandMid.style.paddingBottom === '40%') ...

这就是为什么您不能应用负填充值source

如果有帮助,请告诉我!

【讨论】:

  • @Limondero 分享以关心它在修复外壳后如何不工作?
  • 哦,当然不行,因为你不能为任何 html 元素设置负填充!
  • Uncaught TypeError: Cannot read property 'addEventListener' of null at scripts.js:3
  • @Limondero 你用过吗:var expandMid = document.getElementById("mid");
  • 因为如果不是,我认为您仍在使用:var expandMid = document.getElementsByClassName("mid"); 它返回 HTMLCollection 而不是实际元素!
【解决方案5】:

Padding-bottom 是来自您的 css 的计算属性,因此,您将无法通过 elem.style.paddingBottom 访问 padding-bottom。

用 jQuery 解决这个问题

我会推荐这种方法,以便它可以跨浏览器兼容。

$(document).ready(function() {
  var elem = $('.block');
  
  // access paddingBottom like so...
  // console.log(elem.css('paddingBottom'));

  $('#set-padding').on('click', function() {
    var newPaddingBottomValue = '100px';
    if (elem.css('paddingBottom') !== '50px') {
      newPaddingBottomValue = '50px';
    }
    elem.css('paddingBottom', newPaddingBottomValue);
  });
});
.block {
  width: 10px;
  height: 10px;
  background: black;
  padding-bottom: 50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="block"></div>
<h5>some heading to show padding changes</h5>
<button id="set-padding">Toggle padding</button>

不用jQuery解决这个问题

IE8以下不支持!

(function() {
  var elem = document.getElementById('block');
  var btn = document.getElementById('toggle-padding');
  
  btn.addEventListener('click', function() {
    var newPaddingBottomValue = '100px';
    if (window.getComputedStyle(elem).paddingBottom !== '50px') {
      newPaddingBottomValue = '50px';
    }
    elem.style.paddingBottom = newPaddingBottomValue;
  });
})();
#block {
  width: 10px;
  height: 10px;
  background: black;
  padding-bottom: 50px;
}
<div id="block"></div>
<button id="toggle-padding">Toggle padding</button>

【讨论】:

  • 对不起,我对jQuery一无所知,所以,如果可以的话,请帮我解决使用JS的问题
  • 你的 sn-p 看起来很棒,至少我知道,如果有一天我会使用 jQuery,我将如何解决我的问题
  • @Limondero 因为没有人在不使用 jQuery 的情况下给你一个正确的答案我已经更新了我的答案 ^ 看看 :)
猜你喜欢
  • 2021-07-13
  • 2022-01-19
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 2020-07-03
相关资源
最近更新 更多