forms.js
4.86 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/**
* i-Educar - Sistema de gestão escolar
*
* Copyright (C) 2006 Prefeitura Municipal de Itajaí
* <ctima@itajai.sc.gov.br>
*
* Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
* sob os termos da Licença Pública Geral GNU conforme publicada pela Free
* Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
* qualquer versão posterior.
*
* Este programa é distribuído na expectativa de que seja útil, porém, SEM
* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU
* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral
* do GNU para mais detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto
* com este programa; se não, escreva para a Free Software Foundation, Inc., no
* endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
*
* @author Eriksen Costa <eriksen.paixao_bs@cobra.com.br>
* @license @@license@@
* @since Arquivo disponível desde a versão 2.0.0
* @version $Id$
*/
/**
* Closure com funções utilitárias para o manuseamento de formulários.
*/
var ied_forms = new function() {
var checker = 0;
/**
* Seleciona/deseleciona campos checkbox de um formulário. Cada chamada ao
* método executa uma ação de forma alternada: a primeira vez, altera a
* propriedade dos checkboxes para "checked", na segunda, remove a
* propriedade "checked" dos mesmos. Esse padrão segue nas chamadas
* subsequentes.
*
* @param document docObj
* @param string formId
* @param string fieldsName
* @see ied_forms.getElementsByName
*/
this.checkAll = function(docObj, formId, fieldsName) {
if (checker === 0) {
checker = 1;
} else {
checker = 0;
}
var elements = ied_forms.getElementsByName(docObj, formId, fieldsName);
for (e in elements) {
elements[e].checked = checker == 1 ? true : false;
}
};
/**
* Faz um bind de eventos para um elemento HTML. Baseia-se nos métodos de
* eventos W3C e clássico. O método do Internet Explorer (attachEvent) é
* ignorado pois passa os argumentos das funções anônimas com cópia e sim
* por referência, fazendo com que as variáveis this referenciem o objeto
* window global.
*
* Para registrar diversas funções como listener ao evento, crie uma função
* anônima:
*
* <code>
* window.load = function() {
* var events = function() {
* function1(params);
* function2(params);
* functionN(params);
* }
* new ied_forms.bind(document, 'formId', 'myRadios', 'click', events);
* }
* </code>
*
* @param document docObj
* @param string formId
* @param string fieldsName
* @param string eventType O tipo de evento para registrar o evento
* (listener), sem a parte 'on' do nome. Exemplos: click, focus, mouseout.
* @param string eventFunction Uma função listener para o evento. Para
* registrar várias funções, crie uma função anônima.
* @see ied_forms.getElementsByName
* @link http://www.quirksmode.org/js/events_advanced.html Advanced event registration models
* @link http://www.quirksmode.org/js/events_tradmod.html Traditional event registration model
* @link http://javascript.about.com/library/bldom21.htm Cross Browser Event Processing
* @link http://www.w3schools.com/jsref/dom_obj_event.asp Event Handlers
*/
this.bind = function(docObj, formId, fieldsName, eventType, eventFunction) {
var elements = ied_forms.getElementsByName(docObj, formId, fieldsName);
for (e in elements) {
if (elements[e].addEventListener) {
elements[e].addEventListener(eventType, eventFunction, false);
}
else {
// Usa o modo tradicional de registro de eventos ao invés do método
// nativo do Internet Explorer (attachEvent).
elements[e]['on' + eventType] = eventFunction;
}
}
};
/**
* Retorna objetos de um formulário ao qual o nome (atributo name) seja
* equivalente ao argumento fieldsName. Esse argumento aceita expressões
* regulares, o que o torna mais flexível para atribuir eventos ou atributos
* a múltiplos elementos da árvore DOM.
*
* @param document docObj Um objeto document, geralmente o objeto global document.
* @param string formId O atributo "id" do formulário.
* @param string fieldsName O nome do elemento de formulário ou uma string Regex.
* @return Array Um array com os elementos encontrados.
*/
this.getElementsByName = function(docObj, formId, fieldsName) {
var regex = new RegExp(fieldsName);
var form = docObj.getElementById(formId);
var matches = [];
var matchId = 0;
for (var i = 0; i < form.elements.length; i++) {
var elementName = form.elements[i].name;
if (null !== elementName.match(regex)) {
matches[matchId++] = form.elements[i];
}
}
return matches;
};
};