動かない原因や書き忘れているところがいくつかあるので、順番に書いていきます。
一つ目
html
1<p>Background color1 <input type="color" onChange="setBGcolor1(this.value);"><!-- </p>(終了タグ)がない --><br>
2<p>Background color2 <input type="color" onChange="setBGcolor2(this.value);"><!-- </p>(終了タグ)がない --><br>
この場合はぎりぎりセーフかもしれませんが、終了タグがないと誤認識してしまったり思うような動作にならないことがあるので、書き忘れないようにしましょう。
二つ目
js
1function setBGcolor2(e) {
2function setBGcolor2(f) {
3document.getElementById('msg').style.background = `linear-gradient(#${e}, #${f})`;
4}
5}
6</script>
これですが、
- そもそも
setBGcolor1
がないのに呼び出そうとしている
- どちらかを呼び出しても変数はその呼び出した方しか取得できていないので反映されていない
setBGcolor1
(func…(e)とする)を呼び出してもsetBGcolor2
(func…(f)の方)は実行されない
が原因なはずです。
三つ目

上の画像は、console.log('e: ${e}…');
(Markdownで`が変換されてしまうので'にしています)などとしてeの値を出力したものです。
黄色の線の上に#
とあります。つまり、
js
1document.getElementById('msg').style.background = `linear-gradient(${e}, ${f})`;
でちゃんとした16進数の値が引数に渡されるということです。
コード
最後にコードを書いときます。metaタグや要素の位置は自分で調整しといてください。
あとmsgのidをもった要素がなかったので<div id="msg" style="..."></div>
と書いてありますが、消して構いません。もちろん変数の名前を変えたりしても問題ありません
html
1<!DOCTYPE html>
2<html lang="ja">
3<head>
4 <meta charset="UTF-8">
5 <title>Document</title>
6</head>
7<body>
8 <ul>
9 <div id="msg" style="width: 200px; height: 200px;"></div><!-- #msgという要素がなかったので適当にここに置いています -->
10 <p>Background color1 <input type="color" onChange="setBGcolor1(this.value);"></p><br>
11 <p>Background color2 <input type="color" onChange="setBGcolor2(this.value);"></p><br>
12 </ul>
13 <script type="text/javascript">
14 const msg = document.getElementById('msg');
15 let color1 = '#000000';
16 let color2 = '#000000';
17 function setBGcolor1(e) {
18 color1 = e;
19 msg.style.background = `linear-gradient(${color1}, ${color2})`;
20 }
21
22 function setBGcolor2(f) {
23 color2 = f;
24 msg.style.background = `linear-gradient(${color1}, ${color2})`;
25 }
26 </script>
27</body>
28</html>