Создание 1 из 6 переменных в случайном порядке в jquery - PullRequest
0 голосов
/ 24 октября 2011

Я пытаюсь сделать так, чтобы один из ряда элементов div отображался в случайном порядке с помощью jquery вместе с его навигационной ссылкой (т. Е. Если сервисы будут выбраны, ссылка на сервисы будет недоступна)Я нашел этот код несколько раз в различных формах на этом форуме, и мне было интересно, если и как я мог бы адаптировать его к тому, что я хотел бы.

var services = $(random1, random2, random3).get()
            .sort(function(){return  Math.round(Math.random());}).slice(0,1)
        $(services)/*Conditions here*/;

var random1 = false;
var random2 = false;
var random3 = false;

Это очень плохой пример, я знаю.Я заблудился на этом.Любая помощь будет принята с благодарностью, и спасибо заранее.

РЕДАКТИРОВАТЬ: Я пытался сделать более раннее сравнение, но вот то, над чем я на самом деле работаю.Я пытался адаптировать код от @ pst.

    var v1 = "hello"
var v2 = "world"
var control = [
   function (v) { v1 = v },
   function (v) { v2 = v }
]

$.each(control, function (i, fn) {
   fn(false)
})



$("a#random-btn").click(function(event){
    event.preventDefault();

    var trueIdx = Math.floor(control.length * Math.random())
    props[trueIdx](true)


        if (v1 === true){
                $("div#small-obstacles-contain a#1 span").stop().animate({opacity: 1,}, '100').animate({opacity: 0,}, '100');
                $("div#small-obstacles-contain a#2 span").stop().animate({opacity: 1,}, '100').animate({opacity: 0,}, '100');
        }   

        if (v2 === true){
                $("div#small-obstacles-contain a#3 span").stop().animate({opacity: 1,}, '100').animate({opacity: 0,}, '100');
                $("div#small-obstacles-contain a#4 span").stop().animate({opacity: 1,}, '100').animate({opacity: 0,}, '100');
        }

});

1 Ответ

1 голос
/ 24 октября 2011

Я подозреваю, что это действительно проблема X-Y, здесь указан заголовок, но она может пропустить "то, что действительно желательно в конце дня". В любом случае, концепции несколько адаптируемы.


Я бы не использовал переменные, а скорее массив / объект.

Давайте предположим, что объект (так что мы можем использовать разные имена :-), а затем последовательность «control», для которой свойства могут быть переключены:

var obj = {a: true, b: false, "3": false, hello: "world"} 
var control = ["a", "b", "3"]
// set all to false -- noet that $.each != $().each !!!
$.each(control, function (i, prop) {
  obj[prop] = false
})
// set one true
var trueIdx = Math.floor(control.length * Math.random())
obj[control[trueIdx]] = true

Однако, если переменные были действительно желаемыми по какой-то причине, тогда можно использовать замыкания (это также можно использовать для запуска произвольного кода для конкретной привязки):

var v1 = "hello"
var v2 = "world"
var control = [
   function (v) { v1 = v },
   function (v) { v2 = v }
]
// set all to false -- noet that $.each != $().each !!!
$.each(control, function (i, fn) {
   fn(false)
})
// set one true
var trueIdx = Math.floor(control.length * Math.random())
props[trueIdx](true)

Удачного кодирования.

...