gpt4 book ai didi

javascript - 使用多个 jQuery-minicolors 样本更改多个 div 容器的背景颜色

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:47 24 4
gpt4 key购买 nike

我正在尝试使用 rails jquery minicolors 来更改 div 容器的颜色。每个容器都是一个带有背景颜色属性的盒子。我的方法似乎并没有按照我想要的方式进行。我用的是rails版本的minicolors,但是还是要通过js函数调用minicolors。无论如何,样本工作没有问题,但无论我做什么,盒子都不会改变颜色。如何使用每个样本直接更改目标 div 容器的颜色?

jsfiddle

https://jsfiddle.net/41zomar7/

gem

# Gemfile
gem 'jquery-minicolors-rails'

JS

var self = this;
$('#profile_color_attributes_border_background_color, #profile_color_attributes_body_background_color, #profile_color_attributes_header_label_background_color, #profile_color_attributes_information_box_color, #profile_color_attributes_about_me_background_box_color, #profile_color_attributes_browser_fill_color').minicolors({
theme: 'bootstrap',
animationSpeed: 50,
animationEasing: 'swing',
change: function (hex, opacity) {
var color = $(this).minicolors('rgbaString');
var parent = $(self).closest('div');
if (parent.hasClass("profile-border-bg-color")) {
$("preview-border").css("background-color", color);
} else if (parent.hasClass("profile-body-bg-color")) {
$("preview-container").css("background-color", color);
} else if (parent.hasClass("profile-header-label-bg-color")) {
$("preview-header-block").css("background-color", color);
} else if (parent.hasClass("profile-info-color")) {
$("preview-info-block").css("background-color", color);
} else if (parent.hasClass("profile-about-me-color")) {
$("preview-container-about-me").css("background-color", color);
}
}
});

_form.html.erb

<div class="col-md-3">
<%= f.simple_fields_for :profile_color do |c| %>
<label>Browser Fill Color</label>
<%= c.input :browser_fill_color, as: :minicolors, class: 'form-control browser-fill-color', label: false %>
<label>Avatar Background Color</label>
<%= c.input :border_background_color, as: :minicolors, class: 'form-control profile-border-bg-color', label: false %>
<label>Body Background Color</label>
<%= c.input :body_background_color, as: :minicolors, class: 'form-control profile-body-bg-color', label: false %>
<label>Header Label Background Color</label>
<%= c.input :header_label_background_color, as: :minicolors, class: 'form-control profile-header-label-bg-color', label: false %>
<label>Information Box Color</label>
<%= c.input :information_box_color, as: :minicolors, class: 'form-control profile-info-color', label: false %>
<label>About Me Background Color</label>
<%= c.input :about_me_background_box_color, as: :minicolors, class: 'form-control profile-about-me-color', label: false %>
<% end %>
</div>

<div class="col-md-4">
<div class="preview-container">
<div class=”browser-fill”>
<div class="preview-header">
<h6>Profile Color Preview</h6>
</div>
<div class="preview-border">
<div class="preview-container-avatar">

</div>
</div>
<div class="preview-container-about-me">

</div>
<div class="preview-header-block">

</div>
<div class="preview-info-block">

</div>
</div>
</div>
</div>

最佳答案

你的 parent分配错误。实际输入元素是包含您正在测试 if/else 链的类的元素。每个输入的父 div(所有输入都相同)是 <div class="col-md-3">包装表单标签。

将回调更改为:

    var color = $(this).minicolors('rgbaString');
if ($(this).hasClass("profile-border-bg-color")) {
$("preview-border").css("background-color", color);
} else if ($(this).hasClass("profile-body-bg-color")) {
$("preview-container").css("background-color", color);
} else if ($(this).hasClass("profile-header-label-bg-color")) {
$("preview-header-block").css("background-color", color);
} else if ($(this).hasClass("profile-info-color")) {
$("preview-info-block").css("background-color", color);
} else if ($(this).hasClass("profile-about-me-color")) {
$("preview-container-about-me").css("background-color", color);
}

你就完成了。


正如建议一样,我建议您使用数据属性而不是自定义奇怪的类名称来处理您正在做的事情,除非您也使用这些 CSS 类来进行样式设置。像这样的东西:

<label>Avatar Background Color</label>
<%= c.input :border_background_color, as: :minicolors, class: 'form-control', data: {target: 'preview-border'}, label: false %>
<label>Body Background Color</label>
<%= c.input :body_background_color, as: :minicolors, class: 'form-control', data: {target: 'preview-container'}, label: false %>
# ...etc... not the data-target attribute has the class name of the preview div

然后你真的可以将你的回调简化为:

var color = $(this).minicolors('rgbaString');
var trgt = $(this).data('target');
$('#'+trgt).css('background-color', color);

关于javascript - 使用多个 jQuery-minicolors 样本更改多个 div 容器的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53146043/

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