无法在 jQuery 中更改 div 的背景图像

Posted

技术标签:

【中文标题】无法在 jQuery 中更改 div 的背景图像【英文标题】:Can't change background image of div in jQuery 【发布时间】:2020-09-30 06:47:27 【问题描述】:

我在脚本中添加了一个事件,该事件尝试在单击按钮时设置 div 的背景图像。但是,它不起作用。

代码如下:

html

<div class="col-md-2 imageCard" style="float:left">
            <img class="card-img-top"
              src="https://mdbootstrap.com/img/Photos/Horizontal/City/4-col/img%20(60).jpg" >
</div>

<div class="card-body">
          <blockquote class="blockquote mb-0">
            <p id="quoteSample">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
            <footer class="blockquote-footer" id="quoteAuthorSample">Someone famous in </footer>
          </blockquote> 
</div> 

JS

$('.imageCard').click(function()
    var imageSRC = ($(this).children('img').attr('src'));
    console.log(imageSRC)
    $('.card-body').css("background-image", "url(" + imageSRC + ")")
)

Console.log 返回: https://mdbootstrap.com/img/Photos/Horizontal/City/4-col/img%20(60).jpg

【问题讨论】:

我试过你的代码,它应该可以工作,也许你看不到图像,因为它的大小,尝试添加$('.card-body').css("background-size", "contain")$('.card-body').css("background-repeat", "no-repeat") 您在 console.log 中得到了什么?并包含imageCard类的html代码。 什么是.imageCard?它不包含在 html 中。 【参考方案1】:

当脚本尝试设置事件监听器时,就像按钮元素$('.imageCard') 没有准备好(在本例中为:click)。

为此,您有两种选择:

    将您的脚本标签放在页面底部,这样它们就会在 HTML 之前加载,因此它会找到已经呈现的按钮。

    把你的jquery点击一个窗口加载事件,你可以这样使用:

    $(document).ready(function() 
        // Jquery click event
    );
    

    此代码确保您的 javascript DOM 代码仅在文档(HTML 页面)完全呈现时运行

希望对你有帮助!!

【讨论】:

感谢您的回复!我尝试了代码,但它不起作用。我在帖子中包含了更多信息。【参考方案2】:

我发现了,问题出在连接赋值上,background-image CSS 属性可以通过添加url() 来接收一个URL,但是这个url() 需要接收一个字符串,如果你直接使用它就可以了js,但是由于您是通过函数添加此属性(在参数中使用字符串),因此您需要小心最终返回,例如(您可以在浏览器控制台上尝试):

将字符串(链接)分配给变量

    var imageSRC = "https://mdbootstrap.com/img/Photos/Horizontal/City/4-col/img%20(60).jpg"

只需输入,返回将类似于

    "url(" + imageSRC + ")" // "url(https://mdbootstrap.com/img/Photos/Horizontal/City/4-col/img%20(60).jpg)"

现在,注意url()里面的链接,它不再是字符串,只是文本,url()必须接收字符串

你可以通过两种方式解决这个问题:

    使用"url('" + imageSRC + "')" 而不是"url(" + imageSRC + ")" 这样您就可以在参数上加上正确的引号

    使用 javascript 模板字符串(您可以在此处阅读更多信息:https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/template_strings)

    `url("$imageSRC")`
    

【讨论】:

以上是关于无法在 jQuery 中更改 div 的背景图像的主要内容,如果未能解决你的问题,请参考以下文章

jQuery在悬停时更改(带有淡入淡出动画)div的背景图像

使用 jQuery 切换 DIV 背景图像

jQuery背景图像更改

悬停时无法更改css中的背景图像[重复]

jQuery:悬停时更改img

使用 jQuery 在多个背景图像之间切换的更好方法