使用jQuery获取输入然后搜索数组,然后如果我的值是在数组中,输出所需的答案

时间:2015-05-07 13:04:43

标签: javascript php jquery arrays

所以,我对数组来说比较新。我尝试用一​​些变化来解决这个问题。

我尝试做的事情的基础是标题,但我会尝试更详细地解释。

我有一系列PDF,每个PDF都会输出供选择。每个PDF都有一个数组来表示它,该数组包含用户可以选择答案的答案,以指定哪个PDF适合他们的需求。

我已经建了一个表格 -

<form class="form form-vertical specifier" method="post">

    <div class="control-group">
        <div class="input-append">
            <span class="add-on">Q1</span>
        </div>
        <label class="control-label">What is the Sub-Floor?</label>
        <select name="subFloor">
            <option value="">Please Choose</option>
            <option value="1a">Cementious Screed</option>
            <option value="1b">Anhydrite/Calcium Sulphate Screeds</option>
            <option value="1c">Timber/Chipboard</option>
            <option value="1d">Steel</option>
            <option value="1f">Selecta Screenbooard</option>
            <option value="1e">Any Other?</option>
        </select>
    </div>
    <div class="control-group">
        <div class="input-append">
            <span class="add-on">Q2</span>
        </div>
        <label class="control-label">Is there a weight issue?</label>
        <select name="weight">
            <option value="">Please Choose</option>
            <option value="2a">Yes</option>
            <option value="2b">No</option>
        </select>
    </div>

    <div class="control-group">
        <div class="input-append">
            <span class="add-on">Q3</span>
        </div>
        <label class="control-label">Is tehre a height issue?</label>
        <select name="height">
            <option value="">Please Choose</option>
            <option value="3a">Yes</option>
            <option value="3b">No</option>
        </select>
    </div>

    <div class="control-group">
        <div class="input-append">
            <span class="add-on">Q4</span>
        </div>
        <label class="control-label">Is there under-floor heating?</label>
        <select name="heating">
            <option value="">Please Choose</option>
            <option value="4a">Yes</option>
            <option value="4b">No</option>
        </select>
    </div>

    <div class="control-group">
        <div class="input-append">
            <span class="add-on">Q5</span>
        </div>
        <label class="control-label">What is the Sub-Floor</label>
        <select name="damp">
            <option value="">Please Choose</option>
            <option value="5a">Yes</option>
            <option value="5b">No</option>
        </select>
    </div>

    <div class="control-group">
        <div class="input-append">
            <span class="add-on">Q6</span>
        </div>

        <select name="acoustic">
            <option value="">Please Choose</option>
            <option value="6a">Yes</option>
            <option value="6b">No</option>
        </select>
    </div>

    <input type="submit" name="submit" >

</form>

表单值表示问题编号,然后是可以在数组中关联的唯一字母。

数组看起来像这样 -

$pdfs = array( 
    array('pdf01', 'a', 'a', 'a', 'b', 'a', 'a'),
    array('pdf02', 'a', 'a', 'a', 'b', 'a', 'a'),
    array('pdf03', 'a', 'a', 'a', 'a', 'b', 'a'),
    array('pdf04', 'a', 'a', 'a', 'a', 'a', 'a'),
    array('pdf05', 'a', 'b', 'b', 'a', 'b', 'b'),
    array('pdf06', 'c', 'a', 'a', 'b', 'b', 'a'),
    array('pdf07', 'a', 'a', 'a', 'b', 'b', 'a'),
    array('pdf08', 'f', 'b', 'b', 'b', 'b', 'b'),
    array('pdf09', 'f', 'b', 'b', 'b', 'b', 'b'),
    array('pdf10', 'a', 'b', 'b', 'b', 'a', 'b'),
    array('pdf11', 'a', 'b', 'a', 'b', 'a', 'b'),
    array('pdf12', 'b', 'b', 'b', 'a', 'b', 'b'),
    array('pdf13', 'g', 'b', 'b', 'a', 'a', 'b'),
    array('pdf14', 'a', 'b', 'b', 'a', 'a', 'b'),
    array('pdf15', 'd', 'a', 'a', 'b', 'b', 'a')
);`

如果输入值与数组中的内容匹配,我需要能够输出PDF名称。

任何帮助或推动正确的方向都将非常感激。

fyi,我试图保持这种动态,

$('selector').change(function() {
}) 

是,我假设,我需要的方法。

1 个答案:

答案 0 :(得分:0)

我创建了一个json而不是一个数组。

的一些方面

jsonObj = { aaabaa: 'pdf01', aaabab: 'pdf02', .... }

然后你可以把你的答案拼凑成一个字符串并在json对象中查找:

var pdf = jsonObj[answerString]

要查找与非完整字符串匹配的所有PDF,它会变得有点复杂:

  1. 构建正则表达式。对于每个未给出的答案,请插入\ w。所以它看起来像这样:var regEx = /aa\wb\w/(读作a,a,未设置,b,未设置)。 要动态构造正则表达式,首先要将其创建为带有转义反斜杠的字符串:在这种情况下为var regExString = "aa\\wb\\w"。然后将其提供给新的RegExp对象:var regEx = new RegExp(regExString)
  2. 遍历您的对象并检查键:

    var result = []; for (key in jsonObj) { if (regEx.test(key)) { result.push(jsonObj[key]); } }

  3. 然后你终于有一个数组;)但只有有效的PDF。

    但是通过这种方法,您将失去快速有效解决方案的优势。您也可以遍历您的数组,然后只选择有效的元素。使用此解决方案只需要少一点代码。

    JSFiddle用于演示。