2014-10-20 77 views
0

我需要匹配下拉列表值和數組。然後我遇到了一些問題。匹配下拉列表值和數組

var authorArray =["a","b","c"]; 

和作者的名稱必須與書

<form name="myForm" action=""> 
    Author's name: <input type="text" name="authorName"><br> 

和這裏的名稱相匹配是一個下拉列表

<select name="selectBook" id="bookName"> 
    <option value="" selected="selected">-</option> 
    <option id="bookA"value="q">q</option> 
    <option id="bookB"value="r">r</option> 
    <option id="bookC"value="s">s</option> 
</select> 

如果作者a匹配本書q然後輸出書信息x

如果筆者b匹配本書r然後輸出圖書信息y

如果作者c匹配本書q然後輸出圖書信息z

在一個文本框

<input type="button" value="RETRIEVE"> 
<textarea name="infoBox" cols="120"></textarea> 

輸出必須怎麼做呢? 感謝您的幫助

+0

你的問題是什麼? – Thaadikkaaran 2014-10-20 09:12:55

+0

所以你想映射一個2-dim鍵值? (作者,書)=>信息? – fast 2014-10-20 09:35:56

+0

我所做的一切都是失敗的。我不知道如何匹配作者和書籍。這對我來說是最重要的 – 2014-10-20 09:45:13

回答

0

所以,你可以做這樣的事情使用對象:

var authors = { 
 
       a: { 
 
        books: { 
 
\t \t \t  q:"x" 
 
\t \t   } 
 
       }, 
 
       b: { 
 
        books: { 
 
\t \t \t  r:"y" 
 
\t \t \t } 
 
       }, 
 
       c: { 
 
        books: { 
 
\t \t \t  q:"z" 
 
\t     } 
 
       } 
 
} 
 

 
function findBookByName(name){ 
 
    for(a in authors){ 
 
    for(b in authors[a]){ 
 
     if(authors[a][b].hasOwnProperty(name)) return authors[a][b][name];  
 
    } 
 
    } 
 
    
 
    return "NOT FOUND" 
 
} 
 

 
window.addEventListener('load', function(){ 
 
    var selectBook = document.getElementById("bookName"), 
 
     buttonRetrieve = document.getElementById("btnRetrieve"), 
 
     infoBox = document.getElementsByName("infoBox"); 
 
    
 
    buttonRetrieve.addEventListener('click', function(){ 
 
    var result = findBookByName(selectBook.value); 
 
    infoBox[0].value = result; 
 
    
 
    }) 
 

 

 
})
<select name="selectBook" id="bookName"> 
 
    <option value="" selected="selected">-</option> 
 
    <option id="bookA"value="q">q</option> 
 
    <option id="bookB"value="r">r</option> 
 
    <option id="bookC"value="s">s</option> 
 
</select> 
 

 
<input type="button" id="btnRetrieve" value="RETRIEVE"> 
 
<textarea name="infoBox" cols="120"></textarea>

+0

謝謝,但也許我沒有清楚地解釋我的問題。 那裏有一個輸入框,輸入值必須與數組中的值匹配。 這意味着輸入值和下拉值都是正確的,textarea框會給出信息。 非常感謝 – 2014-10-20 16:10:54

0

爲了映射到基本不同的值,你可以設置一個2-暗淡「數組」像2-昏暗的關鍵:

var Info_for_Author_and_Book = { 
'author_a' : { 
    'book_q' : "Info for a, q", 
    ... 
    'book_s' : "Info for a, s" 
    }, 
    ... 
'author_c' : { 
    'book_q' : "Info for c, q", 
    ... 
    'book_s' : "Info for c, s" 
    } 
} 

您可以通過訪問信息數據

var selected_info = (Info_for_Author_and_Book[author] && Info_for_Author_and_Book[author][book]) || "Not available"; 
+0

這似乎有點困難......如果我有100位作者,這個解決方案將成爲一個麻煩 – 2014-10-20 14:08:42

+0

當你實際上需要每一位作者x書的不同信息時,你可能別無選擇..但是你可能能夠自動化它?有沒有計劃的信息? – fast 2014-10-20 15:41:21