Помогите скорректировать скрипт
Есть такой скрипт
<div>
<form name="menufrm">
<select name="menu1">
<option value="">Категория 1</option>
<option value="a1">a1</option>
<option value="a2">a2</option>
<option value="a3">a3</option>
<option value="a4">a4</option>
</select>
<select name="menu2">
<option value="">Категория 2</option>
<option value="b1">b1</option>
<option value="b2">b2</option>
<option value="b3">b3</option>
<option value="b4">b4</option>
</select>
<input type="button" value="Перейти" onclick="combineMenus(this.form, this.form.menu1, this.form.menu2)" />
</form></div>
<script language="JavaScript">
//<![CDATA[
<!-- Original: Ronnie T. Moore, Editor -->
<!-- Idea by: Selvi Narayanan -->
<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! [url]http://javascript.internet.com[/url] -->
<!-- Begin
site = "сайт"; // не добавляйте в конце"/" !!!!!
function combineMenus(frm, menu1, menu2) {
with (frm) {
str = menu1.options[menu1.selectedIndex].value;
str += menu2.options[menu2.selectedIndex].value;
url = site + "/" + str + ".html";
window.location.href = url;
}
}
// End -->
//]]>
</script>
Надо к нему прикрутить еще 2 категории (2 меню). И сделать вывод общего результата не в отдельную страницу html, а на этой же странице, чтобы внизу появлялся нужный текст. Я вижу проблему в строчках: str = menu1.options[menu1.selectedIndex].value; str += menu2.options[menu2.selectedIndex].value; url = site + "/" + str + ".html"; window.location.href = url; Надо, конечно, добавить 2 меню. В последнем куске добавить 2 строчки с str для 3 и 4 меню и как-то изменить 2 последние строчки. Вот с ними у меня не получается. :help: |
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="Keywords" content="">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ГГ</title>
<style>
*{
margin:0;
padding:0;
outline: 0;
}
.choice {
width: 100%;
}
input {
height: 100px;
}
h1 {
display: inline-block;
}
.result {
color: red;
display: inline-block;
}
</style>
</head>
<body>
<div>
<form name="menufrm">
<div class="choice">
<select name="menu1">
<option value="">Категория 1</option>
<option value="a1">a1</option>
<option value="a2">a2</option>
<option value="a3">a3</option>
<option value="a4">a4</option>
</select>
<select name="menu2">
<option value="">Категория 2</option>
<option value="b1">b1</option>
<option value="b2">b2</option>
<option value="b3">b3</option>
<option value="b4">b4</option>
</select>
<select name="menu3">
<option value="">Категория 3</option>
<option value="c1">c1</option>
<option value="c2">c2</option>
<option value="c3">c3</option>
<option value="c4">c4</option>
</select>
<select name="menu4">
<option value="">Категория 4</option>
<option value="d1">d1</option>
<option value="d2">d2</option>
<option value="d3">d3</option>
<option value="d4">d4</option>
</select>
<input type="button" value="Перейти" onclick="combineMenus(this.form, this.form.menu1, this.form.menu2,this.form.menu3,this.form.menu4)" />
</div>
<h1>Результат:</h1>
<h2 class="result"></h2>
</form></div>
<script language="JavaScript">
//<![CDATA[
<!-- Original: Ronnie T. Moore, Editor -->
<!-- Idea by: Selvi Narayanan -->
<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! [url]http://javascript.internet.com[/url] -->
<!-- Begin
function combineMenus(frm, menu1, menu2, menu3, menu4) {
with (frm) {
str = menu1.options[menu1.selectedIndex].value+" ";
str += menu2.options[menu2.selectedIndex].value+" ";
str += menu3.options[menu3.selectedIndex].value+" ";
str += menu4.options[menu4.selectedIndex].value+" ";
document.querySelector('.result').innerHTML = str;
}
}
// End -->
//]]>
</script>
</body>
</html>
|
Огромное спасибо! :victory:
Только в результате должен появляться не такой текст,как написано в option, например a2 b3 c1 d4, а определенный текст, соответствующий этим параметрам. Например, если выберут a2 b3 c1 d4, то текст появится: Привет! Если выберут a1 b4 c1 d2, то Прощай! Это условно, на самом деле там будут фреймы. Может быть какие-то идентификаторы поставить, чтобы переводили куда надо, например к какой-то таблице с идентификатором a2 b3 c1 d4, и в ней будут нужные фреймы. Еще раз спасибо :dance: Наверное это совсем элементарно, извините, если что не так. Но у меня не получается. |
В данном случае with не к чему, как и не нужно menu1.options[menu1.selectedIndex].value, ибо свойство value списка и возвращает значение выбранной его опции. Как и не стоит передавать аргументами весь набор списков формы, иначе при добавлении еще списков придется все время править код. Лучше так:
... onclick="combineMenus(this.form)" //то есть передаем в функцию только форму
//а в функции
function combineMenus(f) {
var n = f.querySelectorAll('select'), r = f.querySelector('.result'), i, s = '';
for(i=0; i < n.length; i++) {
s += n[i].value + '<br>'
}
r.innerHTML = s
}
А вот нужно ли выводить эти значения, или нет, идентификаторы чего либо должны быть в значениях опций, это скорее вопрос к вам. Если судить по значению кнопки "Перейти", то возможно значениями должны быть url соответствующие, и если так, не понятно тогда зачем функция, можно просто выбрав в списке нужное и перейти. Если же предварительно нужно вывести нечто, ну так это можно сделать и иначе, и также без функции. |
Проблема решена с помощью rekzi
Оперативно и грамотно. Спасибо! :victory: |
| Часовой пояс GMT +3, время: 10:26. |