Javascript 只有内联处理程序才能工作

Javascript 只有内联处理程序才能工作,javascript,html,cordova,dom-events,Javascript,Html,Cordova,Dom Events,在我的应用程序上,只有内联处理程序有效 这是我的Javascript函数的一部分 function onDeviceReady() { alert('ready'); document.querySelector('#idCpf').onkeypress = alert('keypress'); document.getElementById("idCpf").onclick=alert("click");

在我的应用程序上,只有内联处理程序有效

这是我的Javascript函数的一部分

function onDeviceReady() {
        alert('ready');
        document.querySelector('#idCpf').onkeypress = alert('keypress');
        document.getElementById("idCpf").onclick=alert("click");
     }
这是我的html代码的一部分

 <input type="tel" autocomplete="on" id="idCpf" onblur="alert('onblur')" placeholder="Seu CPF" required>

ondevicerady
功能上,只有第一个警报起作用,并且
onkeypress
onclick
当功能
ondevicerady
未按下时,单击或模糊输入,向我显示警报。但是我的代码只有在使用内联处理程序时才有效,比如在
input-type。。。。onblur=“警报('onblur')”

我有什么问题

document.querySelector('#idCpf').onkeypress = alert('keypress');
调用
警报(“按键”)并指定
警报('keypress')的返回值作为事件处理程序

警报(“按键”)立即执行,而不是在触发事件时执行

要分配事件处理程序,必须执行以下操作:

document.querySelector('#idCpf').onkeypress = function () { alert('keypress') };
document.getElementById("idCpf").onclick= function () { alert("click") };

您正在调用
alert
并将
alert
的返回值分配给属性,而不是函数。您必须为这些属性分配一个函数。可能的重复项