Чтобы сделать эту работу необходимой вам, вам просто нужно установить hex
результат как val()
поля #displaycolor
.
Однако вы должны заметить, что вы можете DRY это закодировать и улучшить его несколькими способами. Например, присваивая общие классы для вызова единого обработчика событий для всех элементов, предоставляя значения rgb
в качестве аргументов для функции rgbToHex()
, разделяя логики вычислений и извлечения данных c в функциях (ie. Single Принцип ответственности), а также путем установления пределов введенного значения 0-255. Попробуйте это:
function rgbToHex(r, g, b) {
return "#" + componentToHex(r || 0) + componentToHex(g || 0) + componentToHex(b || 0);
}
var componentToHex = function(value) {
return ('00' + parseInt(value, 10).toString(16)).slice(-2);
}
$(".rgb-update").on('input', function() {
var r = Math.min(parseInt($('#txtRed').val(), 10) || 0, 255);
var g = Math.min(parseInt($('#txtGreen').val(), 10) || 0, 255);
var b = Math.min(parseInt($('#txtBlue').val(), 10) || 0, 255);
var hex = rgbToHex(r, g, b);
$('#displaycolor').val(hex).css('background-color', hex);
}).trigger('input');
#displaycolor {
height: 75px;
width: 75px;
text-align: center;
text-transform: uppercase;
border: 1px solid #CCC;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" name="red" id="txtRed" class="rgb-update" maxlength="3" size="3" value="255" />
<input type="text" name="green" id="txtGreen" class="rgb-update" maxlength="3" size="3" value="255" />
<input type="text" name="blue" id="txtBlue" class="rgb-update" maxlength="3" size="3" value="255" />
<p>
<input type="text" name="hex" id="displaycolor" readonly="true" />
</p>
Я бы предложил использовать range
входы, чтобы еще больше помочь с последними.