Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.11.2012, 06:27
Новичок на форуме
Отправить личное сообщение для DarkDaemon Посмотреть профиль Найти все сообщения от DarkDaemon
 
Регистрация: 04.11.2012
Сообщений: 4

Массив кнопок, узнать индекс нажатой кнопки
Имеется массив кнопок button[]. Как узнать индекс нажатой кнопки? Два часа рылся в интернете, а так же на этом форуме, ответ не нашел. Я решил задачу, но считаю, что должно быть решение проще:

<script>
function ins(e){
	var o = document.getElementsByName('butt[]');
	for (i=0;i<o.length;i++){
		if (o(i) == e) alert ('Индекс ' + i);
	}
}
</script>
<input type='button' name='butt[]' value='ok1' onclick='ins(this)'/>
<input type='button' name='butt[]' value='ok2' onclick='ins(this)'/>
<input type='button' name='butt[]' value='ok3' onclick='ins(this)'/>
<input type='button' name='butt[]' value='ok4' onclick='ins(this)'/>
<input type='button' name='butt[]' value='ok5' onclick='ins(this)'/>
<input type='button' name='butt[]' value='ok6' onclick='ins(this)'/>
Ответить с цитированием
  #2 (permalink)  
Старый 04.11.2012, 08:50
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

function ins(t){
alert(t.value.substring(2,3));	
}
Ответить с цитированием
  #3 (permalink)  
Старый 04.11.2012, 10:48
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

на чистом js без цикла вроде никак, не прибегая к ручному заданию номеров и их извлечению (например, как показал vadim5june)

Сообщение от DarkDaemon
(o(i)
o[i]
добавить return, o.length - в отдельную переменную (хотя и Фленаган и Илья Кантор почему-то этого не делают, хотя по идее это выражение вычисляется каждый раз
http://es5.javascript.ru/x12.html#x12.6.3
Цитата:
Повторить
Если присутствует первое Expression, то
Пусть testExprRef будет результатом вычисления первого Expression.
)
видимо из-за того, что машины стали слишком производительными
PS: атрибут onclick уже давно признак плохого стиля, не
Ответить с цитированием
  #4 (permalink)  
Старый 04.11.2012, 13:31
Новичок на форуме
Отправить личное сообщение для DarkDaemon Посмотреть профиль Найти все сообщения от DarkDaemon
 
Регистрация: 04.11.2012
Сообщений: 4

Сообщение от vadim5june Посмотреть сообщение
function ins(t){
alert(t.value.substring(2,3));	
}
А если кнопки называются одинаково? Такое решение не подойдет

Сообщение от bes Посмотреть сообщение
PS: атрибут onclick уже давно признак плохого стиля
А что лучше использовать?

Спасибо за детальные замечания, поправил код:
function ins(e){
	var o = document.getElementsByName('butt[]');
	var l = o.length;
	for (i=0; i<l; i++){
		if (o[i] == e) {var ind = i; break;}
	}
	alert ('Индекс ' + ind);
}

Последний раз редактировалось DarkDaemon, 04.11.2012 в 13:40.
Ответить с цитированием
  #5 (permalink)  
Старый 04.11.2012, 13:40
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от DarkDaemon
А если кнопки называются одинаково? Такое решение не подойдет
если одинаково название то и в Вашем случае будет ошибка когда нажмете вторую из одинаковых
Ответить с цитированием
  #6 (permalink)  
Старый 04.11.2012, 13:57
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

что-нибудь типа такого
<form id="form">
	<input type='button' name='butt[]' value='ok1'/>
	<input type='button' name='butt[]' value='ok2'/>
	<input type='button' name='butt[]' value='ok3'/>
	<input type='button' name='butt[]' value='ok4'/>
<form>

<script>
window.onload = function () {
	function index(element, collection) {
		var len = collection.length;
		for (var i = 0; i < len; i++) {
			if (element == collection[i]) {
				return i;
			}
		}
	}
	document.getElementById('form').onclick = function (e) {
		var e = e || event;
		var target = e.target || e.srcElement;
		if (target.type == 'button') {
			alert(index(target, document.getElementsByName('butt[]')));
		}
	}

}
</script>


Сообщение от DarkDaemon
А что лучше использовать?
свойство onclick, назначать через addEventListener/attachEvent (в отличие от свойства onclick назначенные действия не затрут предыдущие назначенные)
см. ненавязчивый javascript
Ответить с цитированием
  #7 (permalink)  
Старый 04.11.2012, 15:20
Новичок на форуме
Отправить личное сообщение для DarkDaemon Посмотреть профиль Найти все сообщения от DarkDaemon
 
Регистрация: 04.11.2012
Сообщений: 4

Сообщение от bes Посмотреть сообщение
что-нибудь типа такого
свойство onclick, назначать через addEventListener/attachEvent (в отличие от свойства onclick назначенные действия не затрут предыдущие назначенные)
см. ненавязчивый javascript
Да, более изящное решение Спасибо!
Ответить с цитированием
  #8 (permalink)  
Старый 04.11.2012, 15:23
Новичок на форуме
Отправить личное сообщение для DarkDaemon Посмотреть профиль Найти все сообщения от DarkDaemon
 
Регистрация: 04.11.2012
Сообщений: 4

Сообщение от vadim5june Посмотреть сообщение
если одинаково название то и в Вашем случае будет ошибка когда нажмете вторую из одинаковых
Никакой ошибки нет

<script>
function ins(e){
    var o = document.getElementsByName('butt[]');
    var l = o.length;
    for (i=0; i<l; i++){
        if (o[i] == e) {var ind = i; break;}
    }
    alert ('Индекс ' + ind);
}
</script>
<input type='button' name='butt[]' value='ok' onclick='ins(this)'/>
<input type='button' name='butt[]' value='ok' onclick='ins(this)'/>
<input type='button' name='butt[]' value='ok' onclick='ins(this)'/>
<input type='button' name='butt[]' value='ok' onclick='ins(this)'/>
<input type='button' name='butt[]' value='ok' onclick='ins(this)'/>
<input type='button' name='butt[]' value='ok' onclick='ins(this)'/>
Ответить с цитированием
  #9 (permalink)  
Старый 04.11.2012, 15:29
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от DarkDaemon
ror (i=0; i&lt;l; i++)
перестал использовать l, так как здесь на форуме некорректно отображается
Ответить с цитированием
  #10 (permalink)  
Старый 04.11.2012, 15:36
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от DarkDaemon
Никакой ошибки нет
Да нормально работает-это я ошибся
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить код нажатой кнопки при клике. AllanZ Элементы интерфейса 7 03.06.2012 18:54
Как узнать индекс элемента над которым находится курсор Zhazhah jQuery 2 28.03.2011 23:30
Можно ли узнать нажатие кнопки "назад" в браузере ? phenom jQuery 0 03.02.2011 18:07
узнать индекс перемен массива из значения bushstas Общие вопросы Javascript 3 14.12.2010 01:23
как узнать индекс? oxx Элементы интерфейса 4 14.11.2008 14:00