2014-10-07 67 views
0

我有以下問題 我有一個flashcard測驗的代碼,但我需要它洗牌的順序。 我認爲最好的解決方案是改變下一個按鈕功能的內容。 下面是函數的代碼:在jquery中隨機抽樣測驗/ flashcards

C.prototype.next = function() { 
var that = this; 
var $next = this.$current.next(); 
if (!$next.length) { 
    return; 
} 

setTimeout(function() { 
    that.setCurrent($next, 'h5p-previous'); 

    if (!that.$current.next().length) { 
    that.$nextButton.addClass('h5p-hidden'); 
    } 
    that.$prevButton.removeClass('h5p-hidden'); 
    that.setProgress(); 
}, 10); 
}; 

所以我需要改變把它撿起一個隨機的下一個問題。重要的是,這樣一個測驗有很多問題,如果問題再次出現,這是不好的,所以一個簡單的隨機化不會奏效。我試圖用數組解決它,並選擇一個隨機元素,並在for循環中刪除它,但我不做jQuery這就是問題。所以希望你的幫助。

如果我已經寫了代碼,我可以對自己做這些,但這樣我不會很多。我還聯繫了代碼的所有者,但代碼很老,他沒有回答,我想他現在不再活躍了。

如果在下一個按鈕功能中不可行,我可以發佈完整的代碼。 在此先感謝。 對不起,我的英語不好。

+0

你可以做一個小提琴? – 2014-10-07 21:20:41

+0

http://jsfiddle.net/oL978pfa/不能給你html代碼,因爲它安裝在joomla中,但是這裏有一個鏈接http://kanjilearn.net/index.php/n5 – user3125470 2014-10-07 21:26:12

+0

你可以添加一個功能請求到[H5P.Flashcards](https://github.com/h5p/h5p-flashcards/issues)。我們可能會有更多的人想要這個功能。 – icc 2015-03-09 14:13:07

回答

0

使用您的隨機函數生成排列,而不是選擇隨機元素。

在for循環所有元素中,將當前元素與數組中的隨機其他元素交換。 如果您只需要40個問題中的10個,那麼您可以只取前10個元素。

就我所知,它和隨機函數一樣隨機。

我的小提琴:http://jsfiddle.net/gncuvrsx/

function randomIntFromInterval(min, max) { 
    return Math.floor(Math.random() * (max - min + 1) + min); 
} 

var things = [ 
    "some string", [1, 2, 3], -5, { 
    foo: 'bar' 
}, 
3.1415, 42]; 

alert(things); 

var random = JSON.parse(JSON.stringify(things)); 

var L = random.length; 

for (var i = 0; i < L; i++) { 
    var j = randomIntFromInterval(0, L - 1); 
    var b = random[j]; 
    random[j] = random[i]; 
    random[i] = b; 
} 
alert(random); 
+0

感謝您的詳細解答,但編寫一個代碼來選擇一個隨機元素不是問題。也許我沒有解釋得很好。問題是我不知道在代碼中「安裝」隨機選取器的位置。 – user3125470 2014-10-07 21:52:58

+0

也許我太懶了,只能閱讀關鍵字。 但我會分開選擇下一個項目和隨機化問題順序的顧慮。 所以我會在代碼中找到一個更早的地方做隨機化。 您不必修改不受控制的代碼。 – Pieter21 2014-10-08 08:32:34