Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

« Léo »

Pegar keyCode com AddEvent

Recommended Posts

Fala galera,

 

Seguinte, tenho uma Função addEvent e e gostaria de atraves dela aplicar a funcao soNum (que só permite numeros) num campo. Como pego o keyCode quando seto o 'onkeydown' via JS externo?

 

Minhas funções:

 

// Permite só numeros
soNum = function(cod) {
	if((cod>= 48 && cod<=57) || (cod>= 96 && cod<=105) || (cod>=37 && cod<=40) || (cod==8) || (cod==9) || (cod==35) || (cod==36) || (cod==46)) {
		return true;
	}else {
		return false;
	}
}

// Para adicionar eventos
addEvent = function(objs, evento, func, params) {
	for(i=0; i<objs.length; i++) {
		obj = objs[i];
		if(obj) {
			funcOld = obj[evento];
			obj[evento] = function() {
				if(funcOld) { funcOld(); }
				if(params) {
					func(params);
				}else {
					func();
				}
			}
		}
	}
}

// Aplica as funções
window.onload = function() {
	
	// Aplica função só numeros --------------------------------------
	objs_b = [gE('cp_preco')];
	addEvent(objs_b, 'onkeydown', soNum, OqPonhoAqui);

}

Desde já agradaço!

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

não seiu se entendi sua duvida!

você pode chamar uma função dentro de outra

 

function addEvent(){
...
soNum():
}

neste caso, sempre que executar a função addEvent() na sequência vai rolar a função soNum().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa fercosmig,

 

Na verdade minha duvida nao é essa não. Eu ja consigo acionar a função soNum aonde eu quero (q é num onkeydown de um input). O que não consigo é passar o event.keyCode para a função soNum, estando as funções num JS externo.

 

Entendeu?

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

~Quem criou esta função addEvent? Foi você?

 

Se sim, você esqueceu de passar o escopo da função e os argumentos para o callback, por isso esta tendo dificuldades.

 

Você vai ter que alterar estas linnhas:

 

if(funcOld) { funcOld(); }
				if(params) {
					return func(params);
				}else {
					return func();
				}

Minha sugestão* é para algo como:

 

if(funcOld) { funcOld.call(this, arguments); }
				if(params) {
					return func.apply(this, Array.prototype.slice.call(arguments).push(params));
				}else {
					return func.apply(this, Array.prototype.slice.call(arguments));
				}

E no seu callback:

(...)

soNum = function(cod) {

cod = cod.keyCode;//gato mal feito só para tua função funcionar do jeito que tá

(..)

 

*é só uma sugestão, nem testei o código, mas já dá para ter uma ideia do que você terá que fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! Klaygomes,

Testei seu código, mas deu o seguinte erro:

second argument to Function.prototype.apply must be an array
http://istrata.intranet/Istrata/clientes/dimel/interface/js/acoes.js
Line 42

Pode dar uma explicada nele? boiei completamente... rsrsrs

Sim, fui eu q criei a addEvent aí.

 

Só uma coisa, no trecho que você pediu para eu alterar, não existem aqueles "return"s não. Coloquei para um teste e esqueci de remover.

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tomei a liberdade para editar a sua função, olha como ficou:

 

addEvent = function(objs, evento, func, params) {
	for(i=0; i<objs.length; i++) {
		obj = objs[i];
		if(obj) {
			funcOld = obj[evento];
			obj[evento] = function() {
				if(funcOld) { funcOld(); }
					var args = Array.prototype.slice.call(arguments);//aqui eu coleto todos os argumentos do evento e os 'transformo' em um array
					if(params) args.unshift(params);//Params sempre será o primeiro argumento do callback
						func.apply(this, args);//chamo a função func com o escopo atual e os argumentos 
			}
		}
	}
}

*Edit:

O callback vai receber como primeiro parametro o valor que você especificar no addEvent e o objeto EVENT como segundo.

 

Exemplo de utilização:

 

// Aplica as funções
window.onload = function() {
	
	// Aplica função só numeros --------------------------------------
	objs_b = [gE('cp_preco')];
	addEvent(objs_b, 'onkeydown', soNum);

}

E na função

 

// Permite só numeros
soNum = function(cod) {
//trate isso aqui depois em uma forma mais elegante
ev = cod;
cod = cod.KeyCode || cod.which;
	if((cod>= 48 && cod<=57) || (cod>= 96 && cod<=105) || (cod>=37 && cod<=40) || (cod==8) || (cod==9) || (cod==35) || (cod==36) || (cod==46)) {

	}else {
ev.returnValue = false;
if(ev.preventDefault)ev.preventDefault();
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Klaygomes,

 

Deixa eu ver se entendi. O Callback seria o que um evento retorna?!

Se sim, a minha função vai receber o retornado pelo callback e os paramentros definidos no addEvent assim:

minhaFuncao(paramFuncAddEvt, retPeloEvt) {...}

 

Estou certo?

 

Pode me recomendar algum tutorial sobre o assunto para que eu entenda melhor?

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

pô eu essa semana fiz uma parada parecida, so que eu fiz o seguinte...

"OnKeypress" , "métodoQueEuQuero(event)"

 

ai la..eu fiz

var = event.KeyCode

Compartilhar este post


Link para o post
Compartilhar em outros sites

klaygomes,

 

Não consegui fazer o seu código funcionar aqui.

Será q você poderia montar um arquivo de exemplo?

 

Desde ja agradeço mt.

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.