的input type="color"
具有默认颜色是黑色: #000000
。
即使我给它一个空值...
<input type="color" value="" />
...默认的颜色是黑色始终。
我希望用户有选择颜色的选择,但如果他不就意味着没有颜色被选中,甚至没有白色#FFFFFF
。
有没有办法来强制input type="color"
不是有黑色的默认?
我可以用某种“听众”的,以检查用户是否改变颜色,第一次如果不是,则忽略的价值,但我想避免的JavaScript。
虽然采用了十六进制编码value
的属性<input type="color">
有一两件事我注意到的是,它必须是六位数字,如果你白用#fff
,这是行不通的。 它必须#ffffff
。
通过JavaScript设置,当同样的事情发生。 document.querySelector('input[type="color"]').value = '#fff'
不起作用。 颜色保持黑色。 你必须使用document.querySelector('input[type="color"]').value = '#ffffff'
为它工作。
事情要小心。
使用价值:
<input type="color" value="#ff00ff" />
如果你想知道,如果输入保持不变,你可以做这样的事情(使用jQuery):
$(function(){
$('input').change(function(){
$(this).addClass('changed');
})
})
http://jsfiddle.net/j3hZB/
编辑:现在,因为我理解正确你的问题,我已经更新我的答案。
尽管W3C规格定义了value
属性具有代表颜色的字符串,它没有定义的默认颜色。 所以,我认为默认颜色的实现在浏览器的自由裁量权留下。
然而, WHATWG规格 anwers你的问题与此注,
注意:当输入类型的元素是在颜色状态,总有一个彩色摄像,有没有办法将值设置为空字符串。
此外,基于你的预期下,CSS语言从未定义一个NULL
为任何元素,这使得不可能对于属性input type='color'
有NULL
作为默认值。
解决方法:
解决方法是本阴影DOM API英寸
使用Chrome开发者工具,我发现,我们可以给出一个transparent
颜色伪元素::-webkit-color-swatch
的背景属性-
input[type=color]::-webkit-color-swatch
{
background-color: transparent !important;
}
对于上述CSS,你的HTML谨此- <input type="color">
。 现在,你不必有什么样的听众,告诉用户是否更改了默认的颜色或没有。 你可以简单地处理transparent
为主色调为NULL颜色上,你可以做出决定的值是否被更改或不!
我相信,你会发现类似那种从阴影DOM信息为Firefox为背景设置透明值。 IE仍然是我们的一个痛。
不知道这个问题只在Chrome推出的,但我只是找到了镀铬的快速修复。 我们需要设置输入值#FFFFFF第一,之后将其设置为默认值,默认的颜色会出现,而不是黑色
var element = document.querySelector('input[type="color"]');
element.value = '#FFFFFF'; //remember the hex value must has 7 characters
element.value = element.defaultValue;
希望它能帮助别人:)
我已经实现了这种为自己的解决方案。 它显示了不错的“透明”按钮。 当点击它会触发隐藏正常输入的颜色。 当颜色被拾取,透明按钮将隐藏和输入颜色将显示出来。
干杯。
function clickInputColor( button ) { $( button ).next().click(); } function inputColorClicked( input ) { $( input ).show(); $( input ).prev().hide(); }
.inputEmptyColorButton { background:url("http://vickcreator.com/panel/images/transparent.png") center repeat; width: 50px; height: 1.5em; vertical-align: bottom; border: 1px solid #666; border-radius: 3px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button onclick="clickInputColor( this );" class="inputEmptyColorButton"></button> <input onchange="inputColorClicked( this );" style="display: none;" type="color" value="" />
答案可以是双重的。
- 对于显示的目的,是的,你可以通过设置输入你想要的颜色的值设置一个默认的颜色。 你可以看到品种,这此页面上的答案。
- 从技术上讲,没有。 这是不可能通过POST发送一个空值的颜色。 张贴的值将始终默认为
#000000
或您已设置默认值(如1中提到的)颜色。
这个经过一番思考,也许是这个实用的解决方案可能是选择#010101
作为参考,以null
或false
或什么的。 这又给一些的jQuery(或javascript),以使其不太可能,这个值可以设置。
<input type="color" name="myColor" required="" />
举例来说,一方面被设置为所述色彩输入required
可以给定的值#010101
在事件load
。 而且可以肯定,阻止用户选择的颜色#010101。
(function($){
"use strict";
// Set all required color input values to #010101.
$(window).on("load", function() {
$("[type='color'][required]").val() == "#010101";
});
$("[type='color'][required]").on("change", function() {
// Prevent users selecting the color #010101.
if($(this).val() == "#010101") {
$(this).val() == "#000000";
}
});
})(jQuery)
在服务器端验证的时间, #010101
被认为是empty
(或false
,等)。
<?php
$color = htmlspecialchars($_POST['myColor']);
if($color == "#010101") {
// Do variable empty routine
} else {
// Do variable has value routine
}
?>
*现在你可以相当肯定知道,如果用户设置的值,只要UA具有JavaScript功能。
其缺点是在负载的颜色的设置。 与预先设定的值刷新是不可能这样。 也许,这可以通过使用的sessionStorage的改善。*
但真正的问题是:我为什么这样做呢? 我不认为它应该是neccessary,默认值为#000000
是输入型的正常运作单一偏差 。 除了range
输入类型,它也具有一个可选的默认值,该颜色输入类型有很大的不同。