Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 25.03.2016
Сообщений: 8
1

Как вызвать функцию по событию кнопки и состоянию радиокнопки

25.03.2016, 16:46. Показов 5760. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дано: кнопка, радиокнопка и функция, которая должна вызываться строго по двум условиям (по И):
- по нажатию кнопки
- и при определенном положении радиокнопки
При этом к кнопке и радиокнопке желательно обращаться по id.

Код:

HTML5
1
2
3
4
5
6
7
<html>
<body>  
<button id='but_id'>click me</button>
<input type=radio name='radiobutton' value="1" id="labeled_1" checked/>
<input type=radio name='radiobutton' value="2" id="labeled_2"/>
</body>
</html>
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>    
 
  function myAlert() {
    alert("Функция вызвана");
  }
 
  // читаем состояние радиокнопки
  var stateRadio = document.getElementById('labeled_1').value;
 
  // ХОЧЕТСЯ ПОЛУЧИТЬ ЧТО-ТО ПОДОБНОЕ (хотя и понятно, что работать так оно не будет):
  if ((stateRadio==2) && (but_id.onclick))
  {
    myAlert;
  } 
</script>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2016, 16:46
Ответы с готовыми решениями:

1C- 8.0, Немогу вызвать процедуру отчета по событию нажатия кнопки
1C- 8.0, Немогу вызвать процедуру отчета по событию нажатия кнопки, так как в собтие кнопки такую...

Как вызвать функцию с новым аргументом при нажатии кнопки в Tkinter?
Всем привет) Начал осваивать питон и столкнулся с такой вот темой, при запуске срабатывает команда...

По какому-либо событию (клику кнопки) вызывать функцию из определенного класса
Здравствуйте, уважаемые гуру с#. Подскажите, пожалуйста, как сделать так, чтобы по какому-либо...

Вызвать функцию по нажатью кнопки
Привет. Покажите пожалуйста как по нажатию кнопки &quot;start &quot; запустить цикл из другого исходника...

11
Философ-разговорник
1066 / 391 / 120
Регистрация: 20.02.2016
Сообщений: 884
Записей в блоге: 1
25.03.2016, 19:51 2
можно попробовать так:

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!doctype html>
<html>
<head>
<title>XYZ</title>
<meta charset="utf-8" />
<script>    
function myAlert(){
// читаем состояние радиокнопки
var stateRadio = document.querySelector('#ff').radiobutton.value;
 
// ХОЧЕТСЯ ПОЛУЧИТЬ ЧТО-ТО ПОДОБНОЕ (хотя и понятно, что работать так оно не будет):
if((stateRadio==2) && (event.target.id=='but_id')){
alert("Функция вызвана");
}
}
onload=function(){
document.getElementById('but_id').onclick=myAlert;
} 
</script> 
</head>
<body>  
<button id="but_id">click me</button>
<form id="ff">
<input type="radio" name="radiobutton" value="1" checked />
<input type="radio" name="radiobutton" value="2" />
</form>
</body>
</html>
0
0 / 0 / 0
Регистрация: 25.03.2016
Сообщений: 8
26.03.2016, 13:34  [ТС] 3
Всем ответившим большое спасибо. Хорошо, что мир не без добрых людей )

Добавлено через 13 часов 23 минуты
Не пойму, почему в строке 9 состояние радиокнопки считывается, а в моем случае - нет:
Javascript
1
2
var stateRadio = document.querySelector('#ff').radiobutton.value; // исходный вариант, работает
var stateRadio = document.getElementById('labeled_1').value;      // альтернативный вариант, не работает
Добавлено через 1 час 21 минуту
Цитата Сообщение от dry fig Посмотреть сообщение
Не пойму, почему в строке 9 состояние радиокнопки считывается, а в моем случае - нет
Разобрался. Дело было не в бабине ) Так что проехали.

Привожу окончательный работающий вариант кода:
HTML5
1
2
3
4
5
6
7
8
9
  <head>
    <meta charset="utf-8" />
    <title>Вызов функции по событию кнопки и состоянию радиокнопки</title>
  </head>
  <body>  
    <button id='but_id'>click me</button>
    <input type='radio' name='radiobutton' value='1' id='labeled_1' checked />
    <input type='radio' name='radiobutton' value='2' id='labeled_2'/>
  </body>
Javascript
1
2
3
4
5
6
7
8
  <script>
    but_id.onclick = myAlert;
    function myAlert(){
      if (labeled_1.checked) {
        alert("Функция вызвана");
      }
    }       
  </script>
Еще раз всем спасибо за поддержку.
0
Философ-разговорник
1066 / 391 / 120
Регистрация: 20.02.2016
Сообщений: 884
Записей в блоге: 1
26.03.2016, 13:59 4
можно и без использования формы сделать:

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!doctype html>
<html>
<head>
<title>XYZ</title>
<meta charset="utf-8" />
<script>    
onload=function(){
document.getElementById('but_id').onclick=function(){
var val=document.querySelector('[name=radiobutton]:checked').value;
if((val==2) && (event.target.id=='but_id')){
alert("Функция вызвана");
}
}
} 
</script> 
</head>
<body>  
<button id="but_id">click me</button>
<input type="radio" name="radiobutton" value="1" checked />
<input type="radio" name="radiobutton" value="2" />
</body>
</html>
Радиокнопка - это переключатель, его value - это value выделенного кружочка. А
Javascript
1
var stateRadio = document.getElementById('labeled_1').value
всегда будет равно "1", независимо от того, какой кружок в данный момент отмечен.
0
0 / 0 / 0
Регистрация: 25.03.2016
Сообщений: 8
26.03.2016, 15:27  [ТС] 5
Цитата Сообщение от Padonak Посмотреть сообщение
можно и без использования формы сделать
У меня так и сделано.
А с радиокнопкой - да, все именно так, как Вы написали, это я уже понял.

Пока все же не могу решить свою задачу "красиво". Дано: двухпозиционная радиокнопка и две таблицы. Таблицу 1 можно редактировать, установив радиокнопку в положение 1, таблицу 2 - установив радиокнопку в положение 2.
Код по первоначальному замыслу должен иметь следующий вид:

HTML5
1
2
3
4
5
<button id='id_button'>Редактировать</button>
<input type='radio' name='radiobutton' value='1' id='labeled_1' checked />
<input type='radio' name='radiobutton' value='2' id='labeled_2'/>
<table id='id_table1'>
<table id='id_table2'>
Javascript
1
2
3
4
5
    function editTable(id_table) {
      if ((labeled_2.checked) && (id_button.onclick)) {
        // код, редактирующий таблицу (в нашем случае таблицу 2, т.к. выбрано второе состояние радиокнопки)
      }
    }

Однако одним-единственным параметром id_table обойтись не получается в силу того, что радиокнопку можно прочитать только в теле функции. Поэтому приходится добавлять второй параметр id_table, вот так:
Javascript
1
2
3
4
5
    function editTable(id_table_1, id_table_2) {
      if (labeled_2.checked) {
      // код, редактирующий таблицу;
      }
    }
А это, согласитесь, некрасиво. Это же функция, как-никак.
0
Философ-разговорник
1066 / 391 / 120
Регистрация: 20.02.2016
Сообщений: 884
Записей в блоге: 1
26.03.2016, 15:41 6
А если просто написать ф-цию редактирования таблиц, выбирая таблицу как-то так:

Javascript
1
2
3
4
5
6
7
8
9
10
function editTab(n){
var currentTab=document.getElementById('id_table'+n);
// тут ваш код, редактирующий таблицу
}
 
onload=function(){
document.getElementById('id_button').onclick=function(){
editTab(document.querySelector('[name=radiobutton]:checked').value);
}
}
0
0 / 0 / 0
Регистрация: 25.03.2016
Сообщений: 8
26.03.2016, 17:07  [ТС] 7
Цитата Сообщение от Padonak Посмотреть сообщение
А если просто написать ф-цию редактирования таблиц, выбирая таблицу как-то так:
Вариант интересен с точки зрения находчивости - т.е. мы id_table передаем в функцию не напрямую, а в виде строки, "склеивая" 'id_table' и значение радиокнопки.
Но неужели нет более простого способа? Как-то не хочется терять надежду, знаете ли )
0
Философ-разговорник
1066 / 391 / 120
Регистрация: 20.02.2016
Сообщений: 884
Записей в блоге: 1
26.03.2016, 17:12 8
А что такого сложного вот в данном коде? Куда еще проще?

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<!doctype html>
<html>
<head>
<title>XYZ</title>
<meta charset="utf-8" />
<style>
button, input[name="radiobutton"]{
display:inline;
cursor:pointer;
margin:10px;
}
hr{
width:50%;
margin:10px;
}
table{
min-width:30%;
border:1px dashed #000;
border-radius:5px;
background-color:transparent;
margin:20px;
}
table td{
border:1px solid #ccc;
border-radius:5px;
text-align:center;
}
.active{
border:2px dashed Crimson;
background-color:#f8f8ff;
}
</style>
<script>
function _(id){return document.getElementById(id);}
 
function editTab(n){
var i=1;
    while(_('id_table'+i)!=undefined){
    _('id_table'+i).className='';
    i++;
    }
    /* "Редактирование" */
_('id_table'+n).className='active';
}
 
onload=function(){
_('id_button').onclick=function(){
editTab(document.querySelector('[name=radiobutton]:checked').value);
}
}
</script> 
</head>
<body>  
<center>
<button id="id_button">Редактировать</button>
<input type="radio" name="radiobutton" value="1" checked />
<input type="radio" name="radiobutton" value="2" />
 
<hr />
 
<table id="id_table1" cellspacing="3" cellpadding="3">
<tr><td colspan="3">id_table1</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
</table>
 
<table id="id_table2" cellspacing="3" cellpadding="3">
<tr><td colspan="3">id_table2</td></tr>
<tr><td>1</td><td>2</td><td>3</td></tr>
</table>
</center>
</body>
</html>
0
0 / 0 / 0
Регистрация: 25.03.2016
Сообщений: 8
26.03.2016, 17:41  [ТС] 9
Цитата Сообщение от Padonak Посмотреть сообщение
А что такого сложного вот в данном коде? Куда еще проще?
Ну, например, новичку вроде меня нужно немного поразбираться )
Говоря о простом, я вот что имел в виду: я думал, что конструкция типа <событие нажатия кнопки> && <проверка состояния радиокнопки> = <вызов функции> возможна.
Большое спасибо за Ваш код.
0
Философ-разговорник
1066 / 391 / 120
Регистрация: 20.02.2016
Сообщений: 884
Записей в блоге: 1
26.03.2016, 19:32 10
<событие нажатия кнопки> && <проверка состояния радиокнопки> = <вызов функции>
Javascript
1
2
3
4
5
6
7
8
/* по окончании процесса загрузки окна(документа) */
onload=function(){
/* при событии клика(нажатия) кнопки */
_('id_button').onclick=function(){
/* выполнить ф-цию editTab(в зависимости от состояния кнопки) */
editTab(document.querySelector('[name=radiobutton]:checked').value);
}
}
все происходит именно так :-)
0
0 / 0 / 0
Регистрация: 25.03.2016
Сообщений: 8
26.03.2016, 22:02  [ТС] 11
Не хочу напрашиваться (но тем не менее, хе-хе, невольно это делаю)... Мнэ-э-э, а можете сделать вариант без нижнего подчеркивания? Просто интересно, как оно будет выглядеть.
0
Философ-разговорник
1066 / 391 / 120
Регистрация: 20.02.2016
Сообщений: 884
Записей в блоге: 1
27.03.2016, 10:01 12
НП просто для экономии телодвижений и удобочитаемости кода было использовано

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function editTab(n){
var i=1;
    while(document.getElementById('id_table'+i)!=undefined){
    document.getElementById('id_table'+i).className='';
    i++;
    }
    /* "Редактирование" */
document.getElementById('id_table'+n).className='active';
}
 
onload=function(){
document.getElementById('id_button').onclick=function(){
editTab(document.querySelector('[name=radiobutton]:checked').value);
}
}
0
27.03.2016, 10:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2016, 10:01
Помогаю со студенческими работами здесь

Вызвать функцию из динамически созданной кнопки
Здравствуйте. Есть кнопка, по её нажатию она исчезает, а на её месте появляется новая. Суть в том...

По событию нажатия на кнопку вызвать функцию, в которой ждать нового нажатия на ту же самую кнопку
type TForm1 = class(TForm) Button1: TButton; procedure FormCreate(Sender: TObject); ...

Нужно вызвать функцию при нажатии кнопки
мне нужно сделать так при нажатии кнопки submit вызывалась функция &quot; $row=...

Вызвать php функцию при нажатии кнопки
Здравствуйте! 1) Есть php функция и есть кнопка, которая вызывает JS функцию. Как сделать так что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru