2012-07-19 10 views
0

Я очень новичок в javascript, и я пытаюсь сделать разные события в зависимости от типов ввода. У меня есть следующий в моем заголовке HTML:Пытаться перенаправить с помощью javascript

<script type="text/javascript"> 
    function validateForm(){ 
    var val=document.getElementsByName("destination"); 
    if (val == "deprecated"){ 
     window.location="http://website.com/"; 
    } 
    } 
</script> 

Тогда в теле, у меня есть следующий:

<select name="destination"> 
<option value="current_builds">Current Builds</option> 
<option value="deprecated">Deprecated Files</option> 
<option value="mailing_list">Mailing List</option> 
</select><br/> 
<input type="button" value="next >" onClick="validateForm()" /> 

Это, однако, не делает ничего. Он просто остается на одной странице. Я также попытался окружив его внутри тега формы, говоря:

<form name="my_form" onSubmit="validateForm()"> 
... 
</form> 

, а затем с сопрягая JavaScript:

var val = document.forms["my_form"]["destination"].value 

Но это не сработало.

Кто-нибудь может понять, в чем проблема? Спасибо.

ответ

4

Я починил вашу функцию и тестировал:

function validateForm(){ 
    var val=document.getElementsByName("destination"); 
    var theSelectedOption = val[0].options[val[0].selectedIndex].value; 
    if (theSelectedOption == "deprecated"){ 
     window.location="http://website.com/"; 
    } 
    } 
+0

Можете ли вы дать небольшое объяснение, пожалуйста, чтобы я знал о будущем? Как, как вы знаете, чтобы выбрать val [0], а не val [1] или что-то еще? Будет ли время, когда val [1] будет выбран, и можете ли вы привести мне пример, где это произойдет? Кроме того, для чего нужна часть .selectedIndex? – de1337ed

+0

Метод getElementsByName ("destination") 'обращается ко всем элементам, имеющим имя« destination », он возвращает массив всех найденных элементов. Здесь val [0] - первый найденный элемент, val [1] - для второго элемента, найденного в вашем html (если есть) ... SelectedIndex устанавливает или возвращает индекс выбранного параметра в раскрывающемся списке. См. Http://www.w3schools.com/jsref/dom_obj_select.asp и http://www.w3schools.com/jsref/met_doc_getelementsbyname.asp – mabbas

+0

от имени 'getElementsByName', его' Elements' - это множественное значение, которое может быть более чем одним элементом, имеющим это имя, поэтому возвращается коллекция в виде массива. С другой стороны, 'getElementById' является сингулярным, ожидается, что один элемент будет возвращен – codingbiz

0

Вам нужно получить значение из выбранного параметра. Например:

var index = document.getElementsByName("destination").selectedIndex; 
var val=document.getElementsByName("destination").options[index].value; 

Это будет извлекать значение выбранного параметра.

3

Вам нужно получить значение от выбранного элемента. Поскольку document.getElementsByName возвращает массив, попробуйте использовать этот

var val = ​document.getElementsByName("destination")​​​​​[0].value 
+0

Ничего себе, что работает. Но я не понимаю, почему. Почему он представляется в виде массива? Есть ли более одного элемента в этом массиве? – de1337ed

+0

Нет есть один элемент, элемент 0. и да, как в массиве –

+0

Ну, подумайте об этом в течение секунды. Вы вызываете getElementsByName. Это Element_S_, как в нескольких. Javascript вернет вам все элементы с заданным именем, поэтому возвращает их в массив. Даже если это всего лишь один элемент. – Hacknightly

0

Вы упускаете HREF атрибута вы хотите использовать:

window.location.href = 'URL'; 
+0

Это не имеет значения. – Lion

0

сделать следующее

<select name="destination" id="destination"> 

Ваш JavaScript

val=document.getElementsById("destination").value; 

P ет alert(val) в вашем if, чтобы увидеть, если когда-либо оценку истинного

0

Попробуйте его с идентификаторами вместо имени, идентификатор является уникальным элементом. Javascript поддерживает

var destination = document.getElementById("destination"); 
if (destination.options[destination.selectedIndex].value == "deprecated"){ 
    window.location="http://website.com/"; 
} 

HTML

<select id="destination"> 
    <option value="current_builds">Current Builds</option> 
    <option value="deprecated">Deprecated Files</option> 
    <option value="mailing_list">Mailing List</option> 
</select> 
<br /> 
<input type="button" value="next &gt;" onclick="javascript:validateForm();" /> 
0

Попробуйте это немного JQuery

Redirect using drop down

<form name="my_form"> 
    <select id="destination"> 
    <option value="current_builds">Current Builds</option> 
    <option value="deprecated">Deprecated Files</option> 
    <option value="mailing_list">Mailing List</option> 
    </select><br/> 
    <input type="button" value="next >" id="submit"> 
</form> 

$('#submit').click(
    function validateForm(){ 
    var e = document.getElementById("destination"); 
    var val = e.options[e.selectedIndex].value; 

    if (val == "deprecated"){ 
    window.location="http://website.com/"; 
    } 
}); 
Смежные вопросы