Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2020, 23:10   #1
Vzlom
Форумчанин
 
Регистрация: 11.02.2013
Сообщений: 155
По умолчанию Яваскрипт вычисление sin или cos в зависимости от выбора select javascript - как с одной кнопки вызвать две функции события onclick ?

Доброй ночи уважаемые форумчане, изучаю javascript.
Не пойму работу с select, пробовал написать условие выбора селект и по индексу options и по значение value.
Не выполняется условие.
Отдельно могу вывести все значения из элементов с id:t,select1,select2..
Что не так в условии, вроде логически все верно написал.

Код:
<script type="text/javascript">
function add (){
var x = document.getElementById('t').value;
if (formselect.select.options==0) {
document.getElementById('result').innerHTML=Math.sin(x);
}
else if (formselect.select.options==1){
document.getElementById('result').innerHTML=Math.cos(x);
}
}

</script>
<form name="formselect">
<select id="select">
<option id="select1" value="sin">sin</option>
<option id="select2" value="cos">cos</option>
</select>
	<input type="text" id="t" value=""/>
	<input type="button" onclick="add(this)" value="Вычислить"/>
</form>
<div id="result"></div>
Сделал так, синус находит. Переключаю селект на cos, косинус не находит.
Повторно вызвать функцию? после переключения?
Код:
function add (){
var x = document.getElementById('t').value;
if (formselect.select.options[0]) {
document.getElementById('result').innerHTML=Math.sin(x);
}
else if (formselect.select.options[1]){
document.getElementById('result').innerHTML=Math.cos(x);
}
}
Vzlom вне форума Ответить с цитированием
Старый 07.09.2020, 23:19   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от Vzlom Посмотреть сообщение
Переключаю селект на cos, косинус не находит
как переключаете, пока ваша функция if else if
смысл не особо понятен

Начните с упрощения - для выбора косинуса одна функция
для выбора синуса другая, считаю что для селекта с id sin

в итоге у вас будет не id="select1", а id="sin"

и тогда вообще отпадает вопрос зачем нужно Math.sin(x); и как оно вообще должно работать

просто выделяете элемент по id

и никаких массивов не надо.
Alar вне форума Ответить с цитированием
Старый 07.09.2020, 23:26   #3
Vzlom
Форумчанин
 
Регистрация: 11.02.2013
Сообщений: 155
По умолчанию

Цитата:
Сообщение от Alar Посмотреть сообщение
как переключаете, пока ваша функция if else if
смысл не особо понятен
Переключаю в форме select, с синус на косинус.
Код:
Начните с упрощения - для выбора косинуса одна функция
для выбора синуса другая
разве возможно с одной кнопки вызвать две функции события onclick ?
Vzlom вне форума Ответить с цитированием
Старый 07.09.2020, 23:48   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Цитата:
Сообщение от Vzlom Посмотреть сообщение
разве возможно с одной кнопки вызвать две функции события onclick ?
Почему нельзя?
Я вообще не понимаю что вы хотите сделать ))
Alar вне форума Ответить с цитированием
Старый 08.09.2020, 13:29   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,216
По умолчанию

Цитата:
Сообщение от Vzlom Посмотреть сообщение
разве возможно с одной кнопки вызвать две функции события onclick ?
Можно переопределить обработчик события:
Код:
<script type="text/javascript">

function t_sin(){
	var x = document.getElementById('t').value;
	document.getElementById('result').innerHTML=Math.sin(x);
}

function t_cos(){
	var x = document.getElementById('t').value;
	document.getElementById('result').innerHTML=Math.cos(x);
}

</script>
<form name="formselect">
<select id="select">
<option value="sin" onclick="document.getElementById('t_button').onclick=t_sin">sin</option>
<option value="cos" onclick="document.getElementById('t_button').onclick=t_cos">cos</option>
</select>
	<input type="text" id="t" value=""/>
	<input id="t_button" type="button" onclick="t_sin()" value="Вычислить"/>
</form>
<div id="result"></div>
Arigato вне форума Ответить с цитированием
Старый 08.09.2020, 21:04   #6
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,758
По умолчанию

Понятно, что ты хотел, зачем усложнял код массивом, если нужно было ввести всего одну переменную

Код:
<script type="text/javascript">

function add (){
var x = document.getElementById('t').value;
let vl = document.getElementById('select').value;
if (vl=="sin") {
document.getElementById('result').innerHTML=Math.sin(x);
}
if (vl=="cos") {
document.getElementById('result').innerHTML=Math.cos(x);
}
}

</script>
<form name="formselect">
<select id="select">
<option id="select1" value="sin">sin</option>
<option id="select2" value="cos">cos</option>
</select>
	<input type="text" id="t" value=""/>
	<input type="button" onclick="add(this)" value="Вычислить"/>
</form>
<div id="result"></div>
Но правильнее делать как я написал в первом своём ответе, как это сделано в коде Arigato
на каждое действие должно быть своя функция, а из функции, никаких проблем вызвать другие функции нет.

Так как я тему переименовал и другим пригодится как хороший пример )

вот код вызова с одной кнопки две функции события onclick , также можно вызвать три, четыре и пять ))
Это называется функциональное программирование, которому вас и учит веб языки, типа явасрипт, пхп.

Код:
<script type="text/javascript">

function t_sin(){
	var x = document.getElementById('t').value;
	document.getElementById('result').innerHTML=Math.sin(x);
}

function t_cos(){
	var x = document.getElementById('t').value;
	document.getElementById('result').innerHTML=Math.cos(x);
}

function t_all(){
	var x = document.getElementById('t').value;
let vl = document.getElementById('select').value;
if (vl=="sin") {
t_sin();
}
if (vl=="cos") {
t_cos();
}
}

</script>
<form name="formselect">
<select id="select">
<option value="sin">sin</option>
<option value="cos">cos</option>
</select>
	<input type="text" id="t" value=""/>
	<input id="t_button" type="button" onclick="t_all()" value="Вычислить"/>
</form>
<div id="result"></div>
Alar вне форума Ответить с цитированием
Старый 08.09.2020, 23:06   #7
Vzlom
Форумчанин
 
Регистрация: 11.02.2013
Сообщений: 155
По умолчанию

Спасибо за развернутый ответ, но я решил сделать чуть иначе.
Я вчера от Вас узнал, что событие кнопки onclick, может принимать заданное количество функций.
Также нашел свою ошибку в значении переменной x из value, которое не видится как число(тоже исправил).
В итоге решил через две функции:
Код:
<script type="text/javascript">
var x=Number(document.getElementById('t').value);
function sin (){
if (select.value=="sin"){
var x=Number(document.getElementById('t').value);
document.getElementById('result').innerHTML=Math.sin(x);
}
}
function cos (){
if (select.value=="cos"){
var x=Number(document.getElementById('t').value);
document.getElementById('result').innerHTML=Math.cos(x);
}
}

</script>
<form name="formselect">
<select id="select">
<option id="select1" value="sin">sin</option>
<option id="select2" value="cos">cos</option>
</select>
	<input type="text" id="t" value=""/>
	<input type="button" onclick="sin(); cos();" value="Вычислить"/>
</form>
<div id="result"></div>
Vzlom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление выражения с использованием одной функции Fliiz Помощь студентам 3 02.07.2015 21:29
Вызов функции в зависимости от выбора drka Общие вопросы Delphi 17 19.02.2015 12:51
как вызвать в процедуре OnClick другую процедуру OnClick ? ddiipp Компоненты Delphi 7 07.09.2013 16:07
JSP + HQL: как в блоке <select></select> вызвать метод из DAO? Blondy Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 4 01.06.2013 15:54
В зависимости от выбора в Select изменить значения другого Select Tayfun HTML и CSS 3 18.08.2011 00:05