![](/img/trans.png)
[英]Adding a random class to element from an array that duplicates using jQuery
[英]JQuery Adding a class from a random number
我試圖在我的代碼中向特定的id標簽添加一個類。 類別為kb1,kb2,kb3或kb4。 我希望JavaScript從1到4之間選擇一個隨機數,然后將其應用於該類以使其隨機添加一個類。
所有這些都是循環完成的,因此它將每30秒不斷添加和刪除類。
編輯:我很抱歉,我試圖解釋我的問題,沒有添加任何問題。 由於某種原因,當它運行時什么也沒發生。 沒有添加任何類。 您可以基於隨機數添加類嗎?如果是這樣,為什么我沒有設法正常工作?
$(document).ready(function() {
function kbadd() {
number = 1 + Math.floor(Math.random() * 4);
$("#kb1").addClass("kb"+number);
$("#kb2").addClass("kb"+number);
$("#kb3").addClass("kb"+number);
$("#kb4").addClass("kb"+number);
timeoutID = window.setTimeout(kbremove(number), 30000);
}
function kbremove(number) {
$("#kb1").removeClass("kb"+number);
$("#kb2").removeClass("kb"+number);
$("#kb3").removeClass("kb"+number);
$("#kb4").removeClass("kb"+number);
timeoutID = window.setTimeout(kbadd, 1);
}
kbadd();
});
您不能像這樣調用setTimeout
函數。
嘗試
timeoutID = window.setTimeout(function () {
kbremove(number);
}, 30000);
嘗試將setTimeout中的函數包裝在一個函數( demo )中:
$(function () {
function kbadd() {
var number = 1 + Math.floor(Math.random() * 4);
$("#kb1, #kb2, #kb3, #kb4").addClass("kb" + number);
window.setTimeout(function() { kbremove(number) }, 30000);
}
function kbremove(number) {
$("#kb1, #kb2, #kb3, #kb4").removeClass("kb" + number);
kbadd();
}
kbadd();
});
如果您調試代碼(例如使用firebug),則會看到Error: useless setTimeout call (missing quotes around argument?)
消息Error: useless setTimeout call (missing quotes around argument?)
。 這意味着您必須在setTimeout
使用一個函數。
更換
timeoutID = window.setTimeout(kbremove(number), 30000);
同
timeoutID = window.setTimeout(function() {kbremove(number);}, 30000);
編寫腳本的最簡單方法是
function kbadd() {
number = 1 + Math.floor(Math.random() * 4);
$('#kb1, #kb2, #kb3, #kb4').addClass('kb' + number);
window.setTimeout(function() { kbremove(number); }, 30000);
}
function kbremove(number) {
$('#kb1, #kb2, #kb3, #kb4').removeClass('kb' + number);
window.setTimeout(kbadd, 1);
}
$(document).ready(kbadd);
看這里
您正在匿名函數中定義函數。 因此,在調用setTimeout
時, kbadd
和kbremove
在全局范圍中不存在。
嘗試將函數定義移至$(document).ready()
函數之外,如下所示:
function kbadd() {
var number = 1 + Math.floor(Math.random() * 4);
$("#kb1").addClass("kb"+number);
$("#kb2").addClass("kb"+number);
$("#kb3").addClass("kb"+number);
$("#kb4").addClass("kb"+number);
timeoutID = window.setTimeout(function() { kbremove(number); }, 30000);
}
function kbremove(number) {
$("#kb1").removeClass("kb"+number);
$("#kb2").removeClass("kb"+number);
$("#kb3").removeClass("kb"+number);
$("#kb4").removeClass("kb"+number);
timeoutID = window.setTimeout(kbadd, 1);
}
$(document).ready(function() {
kbadd();
});
您的某些setTimeout調用也存在問題。 我認為您實際上可以通過某種重構在一個函數中執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.