2011-06-16 70 views
0

2問題,我有一個列出3個位置的表單。提交表單後,我希望變量「event_location」等於在下拉菜單中選擇的位置。我唯一不明白的是,如果用戶根本沒有選擇一個位置,那麼用戶只是使用默認位置(顯示的第一個位置)。我不認爲我的JavaScript代碼解釋了這一點。下面我已經包含了html和javascript。我感謝任何幫助!Javascript:在下拉菜單中設置默認變量(在OP中解決)

<select name="location" id="event_location" onchange='getSelectedValue();'> 
<option value="sandiego">San Diego</option> 
<option value="losangeles">Los Angeles</option> 
<option value="sanfrancisco">San Francisco</option> 
</select> 

function getSelectedValue() { 

var event_location = document.getElementById('event_location').value; 


} 

函數getSelectedValue()僅在'onchange'事件觸發時發生。因此,如果他們對聖地亞哥的第一選擇感到滿意,他們將不會觸發onchange事件。我應該在函數之外聲明event_location ='sandiego'嗎?

另一個棘手的部分是基於他們選擇哪個event_location(聖迭戈,洛杉磯或者舊金山),我的javascript改變了它們被導向到的URL。如何更改網址以說明他們挑選哪個event_location。例如,如果他們選擇聖地亞哥,一旦他們點擊搜索按鈕,它會將他們帶到:http://myurl.com/sandiego。這裏是HTML和JavaScript我至今對我的第二個功能:

<input type='button' value='Search' onclick='eventViewer();' /> 

function eventViewer() { 
    function getSelectedValue() { 
     var event_location = document.getElementById('event_location').value; 
     } 

    if (event_location = 'losangeles') { 
     window.open('http://...') 
     } 
    else if (event_location = 'sanfrancisco') { 
     window.open('http://...') 
     } 
    else { 
     window.open('http://...') //link to san diego 
     } 
    } 

而不是創建2個獨立的功能,你可以使用標準

var event_location = document.getElementById('event_location').value; 

這隻會抓住從下拉框中的值抓取下拉菜單中的任何值。因此,您不必擔心具有兩種不同功能的變量範圍,您可以在1次'OnClick'事件時聲明所有變量。

+2

爲什麼不添加一個虛擬選項None作爲第一個選項,所以當用戶不選擇任何東西時,(s)他不會去任何地方? – 2011-06-16 21:55:32

+0

所以像一個空白的領域?明智的可用性,你認爲這是最好的選擇? – yoshyosh 2011-06-16 21:58:52

+0

你爲什麼覺得你需要一個嵌套函數? – Dan 2011-06-16 22:00:11

回答

1

在回答你的問題的第一部分,而不是使用附加到select元素的onchange,你可以改變使用onsubmit附加到表單元素,這樣,變量將被填充,無論是否它已改爲:

<form action='/process_form' onsubmit="getSelectedValue();"> 
... 
</form> 

你能澄清你問題的第二部分爲實際的問題 - 我不知道你在此刻問。

編輯:

兩件事可能會讓你的問題更容易第二部分:

  1. 如果沒有其他依賴則使各選擇項的「價值」的下拉列表中您想要將該人發送到的URL。這樣,您可以簡單地從選擇值中讀取URL並直接發送,而無需使用case語句進行翻譯。

  2. 嘗試使用switch語句而不是級聯if/else,它更易於閱讀和調試。還可以減少代碼量,並通過移動動作(即window.open)到switch語句的底部,並使用每個只切換到設置變量改善其清晰度:

例如

switch(event_location) 
{ 
    case "san_francisco": 
    var url = 'http://sanfrancisco.com' 
    break; 
    case "san_diego": 
    url = 'http://sandiego.com' 
    break; 
    default: 
    alert('please choose a city') 
} 
url ? window.open(url) : null; 
+0

對不起,我希望我的變化能夠澄清它。有依賴關係,因爲我有一個通過單擊搜索觸發的函數和一個通過選擇event_location觸發的函數。我會研究使用switch語句。我認爲連接兩個函數的最大問題在於可變範圍。感謝您的耐心和迴應!我真的很感激它 – yoshyosh 2011-06-16 22:12:38

+0

我想我可以隨心所欲,但它仍然不是很清楚。你已經多次提到範圍問題,但我不確定它們是什麼。您顯示的代碼應正確解釋所有內容。如果它看起來不像代碼的作品,你可能會考慮UI是否實際需要兩個下拉菜單,但很難確定是否與上下文無關。 – 2011-06-16 22:21:02

+0

我應該提到在位置之前有一個「輸入優惠券號碼」字段,這可能會使它更清晰一些。我會繼續黑客攻擊,看看是否遇到任何問題。我幾乎得到它:),感謝您的幫助 – yoshyosh 2011-06-16 22:26:13

0
function eventViewer() 
    var event_location = document.getElementById('event_location').value;      

   if (event_location = 'losangeles') { 
          window.open('http://...') 
    } else if (event_location = 'sanfrancisco') { 
     window.open('http://...') 
    } else { 
     window.open('http://...') //link to san diego 
    } 
} 

通常你會使用服務器端代碼(PHP,asp.net,JAVA,...)來存儲用戶選擇,但如果這不是一個選項,只需通過javascript將它保存在cookie中即可。

+0

謝謝你的建議,我對javascript研究它只有一天是非常新的,我想我的方法似乎有點hackish當談到標準哈哈 – yoshyosh 2011-06-16 22:14:04