0

私の目的:

私は自分のウェブサイトにお客様の声のための小さなセクションを作成しようとしています。

紹介文が1つあります。ボタンをクリックすると、現在の紹介文が消え、新しいランダムな紹介文がボックスに表示されます。これは正常に機能します。しかし...ランダムセレクターが重複した紹介文をスローしていることに気付きました(紹介文1が表示され、ボタンがクリックされても、紹介文1が偶然表示されます)

私は次のようなコマンドを書き込もうとしています。新しい配列が前の配列と同じである場合は、ランダム選択プロセス(数学のやり直し)を繰り返します。それ以外の場合は、新しい紹介文を書き込みます(innerHTML)。

私の問題は、IFセクション( "SAME AS CURRENT MESSAGE"をスクロールした場所)のコーディングがわからないことです。

また、次の段階は「スクリプトの開始に行く」部分です(数学をやり直します)

私は少し無知なTBHなので、誰かがここで私を助けてくれたら本当にありがたいです!

前もって感謝します

function quotes() {
    //Define and populate the array 
    var aquote = new Array;
    aquote[0] = "\"Your cakes are fantastic, beautiful designs and taste gorgeous!\"";
    aquote[1] = "\"I can’t believe how beautiful the cake was and how much detail there was on it.  My mum cried when she saw it and didn’t want to cut it up but we eventually persuaded her and it was really tasty.\" Sasha – Rothwell";
    aquote[2] = "\"Thank you for our wedding cake.  The fruit cake was absolutely delicious and so moist.  The flowers you made were beautiful and exactly as we imagined they would be.  We have kept the flowers and they are a great reminder of our wonderful day.\" Paul & Jane – Rutland"
    aquote[3] = "\"My husband said that the cupcakes you made for his birthday are the best he has tasted and your buttercream is divine – I have to agree!\" Dawn – Cambridgeshire"
    aquote[4] = "\"Thank you Bumble Cottage Cakes for My son’s birthday cake it was fantastic as usual I will be back soon and I can’t wait for the next one.\"Liz  – Desborough"

    //Generate a random number then print the quote from that array index
    rdmQuote = Math.floor(Math.random() * aquote.length);
    if (rdmQuote = aquote[SAME AS CURRENT MESSAGE]) {
        alert('quote is same as current')
    } else {
        document.getElementById("randomtestimonial").innerHTML = aquote[rdmQuote];
    }
}
4

6 に答える 6

2

一度だけ初期化されるように配列を定義します。次に、0からn-2の間のランダムなエントリm(nは配列サイズ)を選択し、m番目のエントリをn-1エントリと交換して、このエントリを表示します。したがって、新しい選択では、現在表示されているエントリを選択することはできません。

于 2013-02-26T19:23:30.040 に答える
1

これを行う1つの方法は、要素のコンテンツをランダムに選択された新しいコンテンツと比較し、ループを使用して、それらが異なるまで新しいコンテンツを選択することです。

var currentContent = document.getElementById("randomtestimonial").innerHTML;
do {
  rdmQuote = aquote[Math.floor(Math.random()*aquote.length)];
} while(currentContent == rdmQuote);
document.getElementById("randomtestimonial").innerHTML = rdmQuote;

このコードは、もしaquote.length1だったとしたら、これは無限ループになる可能性があるため、改善される可能性があります。しかし、うまくいけば、それは良い出発点です。

于 2013-02-26T19:22:38.873 に答える
1

最後の見積もりの​​インデックスを保存して比較します。

jsFiddleの例

var lastQuote = -1;
function quotes() {
    //Define and populate the array 
    var aquote = new Array;
    aquote[0] = "\"Your cakes are fantastic, beautiful designs and taste gorgeous!\"";
    aquote[1] = "\"I can’t believe how beautiful the cake was and how much detail there was on it.  My mum cried when she saw it and didn’t want to cut it up but we eventually persuaded her and it was really tasty.\" Sasha – Rothwell";
    aquote[2] = "\"Thank you for our wedding cake.  The fruit cake was absolutely delicious and so moist.  The flowers you made were beautiful and exactly as we imagined they would be.  We have kept the flowers and they are a great reminder of our wonderful day.\" Paul & Jane – Rutland"
    aquote[3] = "\"My husband said that the cupcakes you made for his birthday are the best he has tasted and your buttercream is divine – I have to agree!\" Dawn – Cambridgeshire"
    aquote[4] = "\"Thank you Bumble Cottage Cakes for My son’s birthday cake it was fantastic as usual I will be back soon and I can’t wait for the next one.\"Liz  – Desborough"
    //Generate a random number then print the quote from that array index
    var rdmQuote = Math.floor(Math.random() * aquote.length);   
    if (rdmQuote == lastQuote) {
        alert('quote is same as current')
    } else {
        document.getElementById("randomtestimonial").innerHTML = aquote[rdmQuote];
        lastQuote = rdmQuote;
    }
}
于 2013-02-26T19:25:05.513 に答える
0

変数を使用して、現在のクォートインデックスを保存するだけです。

var current = -1;

function quotes() {

    //Define and populate the array 
    var aquote = new Array;
    aquote[0] = "\"Your cakes are fantastic, beautiful designs and taste gorgeous!\"";
    aquote[1] = "\"I can’t believe how beautiful the cake was and how much detail there was on it.  My mum cried when she saw it and didn’t want to cut it up but we eventually persuaded her and it was really tasty.\" Sasha – Rothwell";
    aquote[2] = "\"Thank you for our wedding cake.  The fruit cake was absolutely delicious and so moist.  The flowers you made were beautiful and exactly as we imagined they would be.  We have kept the flowers and they are a great reminder of our wonderful day.\" Paul & Jane – Rutland"
    aquote[3] = "\"My husband said that the cupcakes you made for his birthday are the best he has tasted and your buttercream is divine – I have to agree!\" Dawn – Cambridgeshire"
    aquote[4] = "\"Thank you Bumble Cottage Cakes for My son’s birthday cake it was fantastic as usual I will be back soon and I can’t wait for the next one.\"Liz  – Desborough"

    //Generate a random number then print the quote from that array index
    rdmQuote = Math.floor(Math.random() * aquote.length);
    if (rdmQuote == current) {
        alert('quote is same as current')
    } else {
        document.getElementById("randomtestimonial").innerHTML = aquote[rdmQuote];
        current = rdmQuote;
    }
}
于 2013-02-26T19:22:26.267 に答える
0

現在の選択をキャッシュするだけです。

  <!-- Hide the script from old browsers //-->
 var _cache="";
 function quotes(){
 //Define and populate the array 
 var aquote = new Array;
   // all your quotes

 //Generate a random number then print the quote from that array index
 rdmQuote = Math.floor(Math.random()*aquote.length);

 if (_cache == rdmQuote) 
     {
         alert('quote is same as current')
     }
     else
     {
       document.getElementById("randomtestimonial") .innerHTML=aquote[rdmQuote];
 }
 _cache  = rdmQuote;
 }
于 2013-02-26T19:21:40.760 に答える
0

あなたの仕事は、質問のタイトルが示すよりも簡単です。配列からランダムな文字列を選択しようとしていて、それが現在の文字列と同じ場合は、別の文字列を選択します。

この文字列にアクセスする方法もすでに知っています。

rdmQuote = Math.floor(Math.random() * aquote.length);
if (rdmQuote == document.getElementById("randomtestimonial").innerHTML]) {
    alert('quote is same as current')
} else {
    document.getElementById("randomtestimonial").innerHTML = aquote[rdmQuote];
}

あなたがした単一ではなく、二重の等号を使用したことに注意してください。= は代入です。== と === は等価比較です。これでも、同じ場合はどうすればよいかという疑問が残ります (アラート以外)。do/while制御コマンドが必要です。

var quote = "";
do {
    rdmQuote = Math.floor(Math.random() * aquote.length);
    quote = aquote[rdmQuote];
} while (quote == document.getElementById("randomtestimonial").innerHTML;
document.getElementById("randomtestimonial").innerHTML = quote;
于 2013-02-26T19:27:58.057 に答える