Não é possível obter a função Javascript ao fogo a partir de uma caixa de texto em um gridview
-
19-09-2019 - |
Pergunta
Eu tenho uma caixa de texto no ItemTemplate de um GridView. No caso _RowDataBound eu adicionar um atributo para a caixa de texto assim:
TextBox txtQuantity = (TextBox)e.Row.FindControl("txtQuantity");
txtQuantity.Attributes.Add("onkeypress", "CheckInputForNumeric(event)");
E isso simplesmente não vai disparar uma função JS.
Eu tentei fazer onClick, onBlur, onKeyPress ... mesmo tentei mudar o caso para:. Onclick, onblur, onkeypress ... nada parece ser capaz de disparar minha função JS
em outro lugar nessa mesma página eu tenho:
txtAddMarkup.Attributes.Add("onkeypress", "CheckInputForNumeric(event)");
(que caixa de texto não está em um gridview) e isso funciona muito bem.
Estou totalmente preso e frustrado neste momento, porque parece que não importa o que eu faço, eu não posso obter esta caixa de texto para disparar uma função JavaScript
Solução
Por favor executar o seu projeto e olhar para o nome da caixa de texto gerado por ver a fonte no broswer (IE, Firefox, Safari, qualquer que seja). Você provavelmente verá que o nome da caixa de texto mudou. Obrigado, ASP.
Você não pode usar o DOM para acessar os elementos pelo nome, porque eles estão renomeado para você.
Outras dicas
Por alguma razão, a exclusão de arquivos temporários de Internet e recarregar a página não estava recebendo os mais novos .js. Eu tinha de descarregar o projeto e re build-lo. O que é estranho porque eu nunca tive que fazer isso antes para outros controles
Obrigado por seus inputs!
Tente esta:
TextBox txtQuantity = (TextBox)e.Row.FindControl("txtQuantity");
txtQuantity.Attributes.Add("onkeypress", "CheckInputForNumeric(event)");
txtQuantity.Attributes["onkeypress"] =
string.Format("javascript:CheckInputForNumeric(this,'{0}','{1}','{2}');", argument1, argument2, argument3);
ou simplesmente
txtQuantity.Attributes["onkeypress"] =
string.Format("javascript:CheckInputForNumeric (this);");