вопрос по JavaSrcipt

Nikitin

В форме имеются несколько пар текстовых полей и кнопок "submit" с уникальными именами.
При нажатии на кнопку выполняется некоторая функция.
Как мне, будучи внутри функции, узнать имя той кнопки, на которую я нажал?

maggi14

сделай по функции на кнопку

Nikitin

нельзя: пары поле-кнопка создаются динамически

dedwowan

какая функция выполняется?
если js, то надо вызов функции вешать на кнопки и передовать ссылку на объект и передавать либо this, либо имя кнопки в функцию

maggi14

а) и что? функции тоже можно создавать динамически;
б) почему бы кнопке не передавать свое имя в вызываемую функцию?
в) SrcElement

Nikitin

а) ты прав, это вариант, хотя так наверно обычно не делают. Не знаю...
б) как?
в) не понятно, можно поподробнее... Как использовать данный объект?

pilot

 
function addEvent(obj, evType, fn, useCapture){
if (obj.addEventListener){
obj.addEventListener(evType, fn, useCapture);
return true;
} else if (obj.attachEvent){
var r = obj.attachEvent("on"+evType, fn);
return r;
} else {
alert("Handler could not be attached");
}
}
function xGetTarget(e){
var targ;
if (!e) var e = window.event;
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode;
return targ;
}

вешаешь event на кнопку и вперед. так?

maggi14

б) ну, функцию f(a,b,c) меняешь на f(a,b,c, name а OnClick='f(a,b,c)' - на OnClick='f(a,b,c,"Button1")'
в) var s = window.event.srcElement.value, наверно. Не помню.

margadon

хотя так наверно обычно не делают

гы, кого это останавливало?!

kruzer25

Просто для расширения кругозора --- а вот какой-нибудь там windows.onload=foobar --- это не тру?
---
...Я работаю...

Nikitin

А может кто-нить дать ссылку на какой-нибудь справочник, где описаны все функции, объекты и их свойства и методы?
чтоб нечто подобное
function addEvent(obj, evType, fn, useCapture){ if (obj.addEventListener){ obj.addEventListener(evType, fn, useCapture); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { alert("Handler could not be attached"); }}function xGetTarget(e){ var targ; if (!e) var e = window.event; if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement; if (targ.nodeType == 3) // defeat Safari bug targ = targ.parentNode; return targ; }
можно было писать и использовать?
вешаешь event на кнопку
---это как?

sergei1969

MSDN

pilot

Просто для расширения кругозора --- а вот какой-нибудь там windows.onload=foobar --- это не тру?

Попробуй повесить так на onload 2 функции.

pilot

А может кто-нить дать ссылку на какой-нибудь справочник, где описаны все функции, объекты и их свойства и методы?

Хорошего такого нет.
http://www.quirksmode.org/js/events_compinfo.html#general и т.д.
Google в помощь.
---это как?

attachEvent и addEventListener смотри.

pilot

MSDN

Наглая ложь и все такое.

kruzer25

Создаём новую функцию, вызывающую те две, и вешаем её на онлоад.
---
...Я работаю антиначным аферистом...

pilot

Создаём новую функцию, вызывающую те две, и вешаем её на онлоад.

Идея старая но плохая. Exceptions?
Google в помощь - почему так нехорошо.

kruzer25

> Google в помощь - почему так нехорошо.
Интернета нету.
Так объясни, почему это некошерно.
---
A2: Потому что так завещал великий и мудрый Ибеме,
и по другому делать некошерно.

Dasar

> Идея старая но плохая. Exceptions?
и в чем проблема?
можно, вообще, сделать честный MultiDelegate с добавлением/удалением обработчиков

pilot


Problems
A distinct drawback of the traditional model is that the onclick property can contain only one function. This becomes a problem when you want to register multiple event handlers for one event.
For instance, suppose you’ve written a module that makes it possible to drag and drop a layer. The module registers an onclick event handler to an element so that clicking on it starts the drag and drop. You have also written a module that silently keep track of user clicks and sends this information to the server onunload, so you can find out how your pages are used. This module, too, registers an onclick event handler to an element.
So what you’d really like to do is
element.onclick = startDragDrop;
element.onclick = spyOnUser;
However, it’s here that things start to go wrong. The second registration of a function to onclick overwrites the first one so that only spyOnUser is executed when the user clicks on the element.
The solution is of course to register a function that executes both other functions:
element.onclick = function {startDragDrop; spyOnUser}
Flexible registration
But suppose that you don’t use both modules on every page in your site. Now if you’d do
element.onclick = function {startDragDrop; spyOnUser}
you could get error messages because one of the two functions might be undefined. So you have to be more careful in registering your event handlers. When we want to register spyOnUser while startDragDrop may (or may not) be registered, we do:
var old = (element.onclick) ? element.onclick : function {};
element.onclick = function {old; spyOnUser};
First you define a variable old. If the element currently has an onclick event handler, put this event handler in old, if it hasn’t, put an empty function in old. Now you register a new event handler to element div. It is a function that first executes old and afterwards spyOnUser.
Now the new event handler is added to the element, while previously registered handlers (if any) are preserved.
One last problem: What if you want to remove one of the event handlers, but not the other? At the moment I’m not sure how this should be done. You’d have to edit element.onclick in some way, but I haven’t really studied this problem.
Other models
So we have seen that the traditional event registration model is simple to use, but has some nasty problems as soon as you want to add more than one event handler to the same event on the same element. The W3C event registration model solves this problem quite neatly.

pilot

можно, вообще, сделать честный MultiDelegate с добавлением/удалением обработчиков
Ты предлагаешь сделать то что сделано, только заново?

Dasar

> Ты предлагаешь сделать то что сделано, только заново?
я предлагаю воспользоваться стандартным патерном MultiDelegate.
Надо при этом писать свой, или найти готовый - это уже отдельный вопрос.

pilot

я предлагаю воспользоваться стандартным патерном MultiDelegate

Если ты предлагаешь воспользоваться .Net штуками вместо стандартных вещей, то, надеюсь, твое предложение так и останется только предложением.

Dasar

причем здесь .net?
ps
ты, в курсе, что означает термин "паттерн"?

pilot

ты, в курсе, что означает термин "паттерн"?

pattern
1. сущ.
1)
а) образец, модель
б) пример (для подражания образчик
to establish, set a pattern — подавать пример
Syn:
prototype, exemplar
2)
а) модель, шаблон
Syn:
prototype
б) выкройка (в кройке и шитье)
intricate pattern — сложная, замысловатая выкройка
в) метал форма, модель (для литья)
3) рисунок, узор (на материи и т. п.)
4)
а) система, структура; принцип, модель (организации чего-л.)
behavior pattern — модель поведения
spending pattern — схема (статей) расходов
- pattern of life
б) стиль, характер (о литературном произведении, театральной постановке и т.д.)
5) амер. отрез, купон на платье
6) воен.
а) автоматная очередь
б) локализация следов на мишени после серии выстрелов; распределение попадания

Gram:
Verb patterns
2. гл.
1)
а) брит., диал. соответствовать; подгонять под образец
Syn:
match II 2.
б) имитировать, копировать (after, on, upon)
Syn:
imitate
2) украшать узором
I want a wallpaper patterned with roses. — Я хочу, чтобы обои были украшены узором из роз.
3)
а) делать по образцу
The railway system was patterned after the successful plan used in other countries. — Система железных дорог была построена по схеме, которая уже была успешно осуществлена в других странах.
б) редк. следовать примеру
Mary has always patterned herself on her mother. — Мери всегда следовала примеру своей матери.

Ты сколько знаешь значений слова "паттерн"?
Я не знаю твоих MultiDelegate. Судя по Google это мало кому известная вещь. Первые две ссылки на которые я залез были про .net компоненты. Объяснишь?

Dasar

> Ты сколько знаешь значений слова "паттерн"?
одно, если брать в контексте данного треда, вернее даже в контексте данного раздела форума (программирование).

Dasar

> Объяснишь?
что-то такое - с точностью до синтаксиса

class MultiDelegate //примитивная реализация
{
   public void AddEvent(function event)
   {
     Events.Add(event);
   }
   public void RemoveEvent(function event)
  {
    Events.Remove(event);
  }
  public void OnExecute
  {
     foreach (function event in Events)
     event;
  }
  List<function> Events = new List<function>
  public static void AddEvent(object obj, function event)
  {
    if (obj.onclick == null)
     obj.onclick = event;
     else if (obj.onclick is MultiDelegate)
     MultiDelegate)obj.onclick).AddEvent(event);
    else
    {
     MultiDelegate delegate = new MultiDelegate;
     delegate.AddEvent(obj.onclick);
     obj.onclick = delegate;
    }
  }
}

pilot

> Ты сколько знаешь значений слова "паттерн"?
одно, если брать в контексте данного треда, вернее даже в контексте данного раздела форума (программирование)

Очень жаль. А куда относятся UML- модели например?
:
что-то такое - с точностью до синтаксиса

:
Ты предлагаешь сделать то что сделано, только заново?

"Вернемся к нашим баранам"?

Dasar

> А куда относятся UML- модели например?
uml-модели и паттерны связывает только следующее утверждение:
ряд паттернов можно с помощью uml-моделей более-менее формально описать.
> "Вернемся к нашим баранам"?
еще раз повторю: не знаю, зависит от контекста.
Оставить комментарий
Имя или ник:
Комментарий: