Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何返回Javascript更改的onClick值?_Javascript_Html - Fatal编程技术网

如何返回Javascript更改的onClick值?

如何返回Javascript更改的onClick值?,javascript,html,Javascript,Html,我有一个带有提交按钮的表单,它在单击时调用提交单击功能。若用户在InputSubmitonClick中并没有输入任何内容,那个么将更改为nothing,但若用户输入所有信息,那个么返回函数的else语句将不起作用 var r = document.getElementById("input1"); var r2 = document.getElementById("input2"); var r3 = document.getElementById("input3"); var r4 = doc

我有一个带有提交按钮的表单,它在单击时调用提交单击功能。若用户在InputSubmitonClick中并没有输入任何内容,那个么将更改为nothing,但若用户输入所有信息,那个么返回函数的else语句将不起作用

var r = document.getElementById("input1");
var r2 = document.getElementById("input2");
var r3 = document.getElementById("input3");
var r4 = document.getElementById("input4");

if (r.value === "" || r2 === "" || r3 === "" || r4 === "" ) {
    document.getElementById("sbmt").onclick="";
} else {
    document.getElementById("sbmt").onclick="submitClick()";
}

问题是,如果要将
onclick
设置为字符串,则应将其设置为function

document.getElementById("sbmt").onclick = submitClick;
我还有两个建议给你

  • 对id=r1、r2…的所有输入使用相同的类。并使用
    querySelectorAll()访问它
  • 使用
    some()
    代替检查每个和值
您的代码看起来像

var inputs = [...document.querySelectorAll('.input')]
if (inputs.some(x => x.value === '')) {
    document.getElementById("sbmt").onclick="";
}
else{
    document.getElementById("sbmt").onclick=submitClick;
}

首先,您似乎忘记检查r2、r3和r4的值

然后,在字符串需要函数时,尝试将onclick事件分配给字符串

只要做:

document.getElementById("sbmt").onclick = submitClick;

首先,当通过javascript分配click侦听器时,分配实际函数,而不是带有函数名的字符串。字符串版本是HTML的东西

另外,我建议不要动态更改函数。让该函数包含是否可以发生单击的验证逻辑。这样做的好处是,您不必每次r1、r2、r3或r4更改时都重新运行单击侦听器分配

像这样:

var r = document.getElementById("input1");
var r2 = document.getElementById("input2");
var r3 = document.getElementById("input3");
var r4 = document.getElementById("input4");

document.getElementById("sbmt").onclick = handleSubmitClick;

function canSubmitClick() {
    return !(r.value === "" || r2 === "" || r3 === "" || r4 === "")
}

function handleSubmitClick(e) {
    if( !canSubmitClick() ) {
        return;
    }

    submitClick(e);
}

请尝试此代码,我希望它能正常工作:

var r = document.getElementById("input1");
var r2 = document.getElementById("input2");
var r3 = document.getElementById("input3");
var r4 = document.getElementById("input4");

if (r.value === "" || r2 === "" || r3 === "" || r4 === "" ) {
    document.getElementById("sbmt").onclick="";
} else {
    document.getElementById("sbmt").onclick = function() {submitClick()};
}

有关更多信息,请查看关于w3schools的教程

Love这些来自ES6的新功能和特性。很高兴浏览器能够快速添加它们,所以我们不需要太多的多边形填充。非常感谢。这有帮助。现在我将尝试理解为什么它需要r2.value r3.value r4.value请再问一个问题我应该有3===还是2==@LadoGelava我更喜欢3==因为我通常知道我比较的是什么数据类型。2==将进行类型转换。当您期望它发生时,它可能很有用,但当您不期望它发生时,调试会很痛苦。