【问题标题】:Data Attributes referencing Arrays [duplicate]引用数组的数据属性[重复]
【发布时间】:2018-03-14 18:59:48
【问题描述】:

我正在构建一个问答游戏,所有的问题、答案选择和正确答案都将存储在按类别排列的不同多维数组中。例如:historyArray 包含所有历史数据等。

我还在前端 UI 中使用引导程序,并且希望能够使用数据属性来引用特定数组,并将该数组中的问题动态加载到按下按钮时将启动的模式中。

这是我目前所拥有的:

HTML:

<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#activeQuestion" data-category="historyArray">
  Launch Random Question
</button>

<div class="modal fade activeQuestion" id="activeQuestion" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h4 class="modal-title">Category Title</h4>
      </div>
      <div class="modal-body">
        <form>
            <div class="row">
                <div class="col-xs-12 question">
                    <p></p>
                </div>
                <div class="col-xs-12 answers">
                    <ul class="answer-list">
                    </ul>
                </div>
            </div>
        </form>
      </div>
    </div><!-- /.modal-content -->
  </div><!-- /.modal-dialog -->
</div><!-- /.modal -->

JS:

var historyCount = 0;

$(document).ready(function(){
    //$('#activeQuestion').modal('show');

    var historyArray = {
        'q0' : {
            'question': 'Which U.S. President is on the 1,000 dollar bill?',
            'a1': 'Ulysses S. Grant',
            'a2': 'Grover Cleveland',
            'a3': 'William McKinley',
            'correct': '1'
        }
    }
});

$('#activeQuestion').on('show.bs.modal', function (event) {
    var button = $(event.relatedTarget);
    var aCat = button.data('category');
    console.log(aCat);
})

目前,console.log 只返回数据属性的值,而不是数组。如何在 console.log 中返回数组,然后我可以解析数组,获取问题、答案选择和正确答案,以便显示它们。我试过使用console.log(aCat[0]),但只返回'h',变量名中的第一个字母。

【问题讨论】:

  • historyArray 不是数组。它只是一个对象。 data('category') 将返回一个字符串。其余的,请阅读Convert string to variable name in JavaScript的答案
  • @MikeMcCaughan - 是的,就是这样......我将我的对象重新格式化为一个实际的多维数组,然后在单击按钮并抓住data attribute 后,我运行attribute + "Array" in eval() 并且我能够完美地返回数组。

标签: javascript jquery arrays twitter-bootstrap bootstrap-modal


【解决方案1】:

这里有几个误解,首先您将数组误认为对象数组是列表[],而对象是键值对。 {something: somethingelse} 要首先解决您的问题,您需要一种访问正确问题列表的方法。

在您的 HTML 中更改它

data-category="historyObject"

并将你的历史对象包装在一个名为 questions 的对象中

    var questions = {
       historyObject: {
         'q0' : {
           'question': 'Which U.S. President is on the 1,000 dollar bill?',
           'a1': 'Ulysses S. Grant',
           'a2': 'Grover Cleveland',
           'a3': 'William McKinley',
           'correct': '1'
         }
      }
    }

现在我们可以通过 questions[aCat] 访问 historyObject,但它不起作用,但您的对象在其自己的范围内,这意味着您将无法访问来自事件侦听器的问题,除非您移动

$('#activeQuestion').on('show.bs.modal', function (event) {
    var button = $(event.relatedTarget);
    var aCat = button.data('category');
    console.log(questions[aCat]);
})

进入你的onload。

希望这会有所帮助。

【讨论】:

  • 所以说 historyObject 有多个问题,我是否可以通过查看 questions[aCat][0] 来简单地引用第一个问题?
  • 好吧,您已将其命名为 q0,因此您可以使用点符号来访问它 questions[aCat].q0 等等,以此类推 questions[aCat].q0.a1 questions[aCat]。 q0.正确 :)
  • 我要求一个更动态的解决方案的原因是我最终会改组每个对象中的条目。所以一开始,q0 会是 q0,但是内容全部打乱后,q0 可能会是 q10。
  • 您可以通过'q${Math.random() * 10}' 随机化哪个问题,引号意味着要返回抽动大声笑 math.random 生成一个介于 0-1 之间的数字,因此乘以 10 可以得到一个介于 0-10 之间的随机数
  • 但我可能会加载重复的问题。我不希望这样
【解决方案2】:

没有提供 JSON 字符串作为 data- 属性值,您可以将不同主题的问题放在同一个对象中(下面的topicArrays)并使用data-category 值作为属性键来访问它们。

var topicArrays = {};

var historyCount = 0;
$(document).ready(function(){
    //$('#activeQuestion').modal('show');

    topicArrays.historyArray = {
        'q0' : {
            'question': 'Which U.S. President is on the 1,000 dollar bill?',
            'a1': 'Ulysses S. Grant',
            'a2': 'Grover Cleveland',
            'a3': 'William McKinley',
            'correct': '1'
        }
    };
});

$('#activeQuestion').on('show.bs.modal', function (event) {
    var button = $(event.relatedTarget);
    var aCat = topicArrays[button.data('category')];
    console.log(aCat);
});

【讨论】:

    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2012-12-11
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2012-02-13
    相关资源
    最近更新 更多