1

JavaScript を学び始めたので、文字列を受け取って同じ文字列を返すプログラムを作成することにしましたが、文字ごとに異なる色になります。

コンパイル時に Rainbow 関数を呼び出した瞬間に、関数が定義されていない理由がわかりません。また、文字列を印刷しようとしていますが、正しく実行しているかどうかわかりません。論理的で文体的なアドバイスや編集は大歓迎です!

<script>
    function Rainbow(x) {
        var mystring = String(x);                                              @* convert to string*@
        var Stringlength = mystring.lenth;                                     @* length fo string *@
        var rainbowstring = new Array(Stringlength);                           @* create array of appropriate size*@
        var counter = 0;
        var clr, letter;
        while (counter < Stringlength) {
            letter = mystring.charAt(counter);
            var randomnumber = Math.floor(Math.random() * 10);                     @* random number generator --> 11 means 0-10 *@        
            switch (randomnumber) {
                case 0: clr = #FF0000; break;
                case 1: clr = #00FF00; break;
                case 2: clr = #0000FF; break;
                case 3: clr = #FF00FF; break;
                case 4: clr = #000000; break;
                case 5: clr = #00FFFF; break;
                case 6: clr = #33FFFF; break;
                case 7: clr = #33FF00; break;
                case 8: clr = #FFFF00; break;
                case 9: clr = #FF66CC; break;
            }
            rainbowstring[counter] = <span style = 'color:"+clr+"'>"+letter+"</span>;                              @* assign color *@
            counter++;                                                         @* increment *@
        }
        return rainbowstring;
    }

    @* need something that generates colors *@
    @* assigns colors to text *@

</script>

<form>
    Enter String: <input type ="text" name ="rainbowstring" id ="rainbowinput"/><br>
</form>

<button
        type = "button" onclick = "Rainbow(document.getElementById('rainbowinput').value)" > Rainbow Generator
</button>
4

3 に答える 3

4

すべての色は文字列でなければなりません。

   switch (randomnumber) {
        case 0: clr = '#FF0000'; break;
        case 1: clr = '#00FF00'; break;
        case 2: clr = '#0000FF'; break;
        case 3: clr = '#FF00FF'; break;
        case 4: clr = '#000000'; break;
        case 5: clr = '#00FFFF'; break;
        case 6: clr = '#33FFFF'; break;
        case 7: clr = '#33FF00'; break;
        case 8: clr = '#FFFF00'; break;
        case 9: clr = '#FF66CC'; break;
    }
于 2013-08-28T01:00:01.017 に答える
1

あなたはそれをどこで呼びますか?私が見るように、未定義になるべきではありません。

そして、あなたはそれを間違っています

rainbowstring[counter] = <span style = 'color:"+clr+"'>"+letter+"</span>; 

次のようにする必要があります。

rainbowstring[counter] = "<span style = 'color:"+clr+"'>"+letter+"</span>"; 

ただし、次のように、通常の変数として rainbowstring を使用することをお勧めします。

rainbowstring += "<span style = 'color:"+clr+"'>"+letter+"</span>";

そして最後に書くべきです

x.innerHTML = rainbowstring;

「stringlength」を使用できるかどうかもわかりませんが、「strlength」などに置き換えることを検討してください

于 2013-08-28T00:55:50.403 に答える
-1

ちょっとした jQuery で..... jsFiddle

jQuery

var rbow, ltrColor;
var colors = new Array('00','33','66','99','CC','FF');
$('#rainbower').click(function() {
    var blah = $('#rainbowinput').val();
    var lenBlah = blah.length;
    rbow = "";
    for (c = 0; c < lenBlah; c++) {
        l = blah.charAt(c);
        ltrColor = "#";
        for (rgb = 0; rgb < 3; rgb++) {
            rndColor = (Math.floor(Math.random() * 6));
            ltrColor += colors[rndColor];
        }
        rbow += "<span style='color:" + ltrColor + "'>" + l + "</span>";
    }
     $('#rainbowoutput').html(rbow);
});

HTML

<form>
    Enter String:
    <input type="text" name="rainbowstring" id="rainbowinput" />
    <br />
</form>
<button type="button" id="rainbower">Rainbow Generator</button>
<div id="rainbowoutput"></div>
于 2013-08-28T01:16:20.937 に答える