【问题标题】:Can I call JS function and how?我可以调用 JS 函数吗?如何调用?
【发布时间】:2020-05-03 19:56:08
【问题描述】:

Okey 社区,

function validate() {
  var name = document.getElementById("name").value;
  var p = document.getElementById("pname");
  
  console.log("validating");  // added by PM-77-1

  if (name === null) {
    p.className += " show";
    return false;
  } else {
    return true;
  }
}
.split {
  height: 100%;
  position: fixed;
  top: 0;
}

.left {
  left: 0;
  width: 40%;
}

.right {
  right: 0;
  width: 60%;
}

.form {
  margin: 30% 5% 30% 5%;
}

.input {
  margin: 2% 2% 2% 2%;
  height: 40px;
  width: 35%;
}

.lower {
  width: 76%;
}

h6 {
  background-color: #3399ff;
  margin-top: 0px;
  min-height: 50px;
  max-height: 50px;
  font-size: 32px;
  color: white;
}

button {
  background-color: #3399ff;
  color: white;
  width: 77%;
  min-height: 50px;
  border: none;
  border-radius: 5px;
  margin-top: 10%;
}

body {
  font-family: Futura Md BT;
}

#map_canvas {
  height: 100%;
}

.name {
  display: none;
}

.lastname {
  display: none;
}

.address {
  display: none;
}

.city {
  display: none;
}

.country {
  display: none;
}

.show {
  display: block;
  margin-top: 0px;
  margin-bottom: 0px;
  color: red;
}
<div class="split left">
  <center>
    <h6>User Details</h6>
    <div class="form">
      <form action="input.php" method="POST" onsubmit="event.preventDefault(); validate()">
        <p class="name" id="pname">Please enter First Name</p>
        <p class="lastname" id="lastname">Please enter Last Name</p>
        <p class="address" id="address">Please enter Street / Number</p>
        <p class="city" id="city">Please enter City</p>
        <p class="country" id="country">Please enter country</p>
        <input type="text" class="input" id="name" name="firstname" placeholder="First Name">
        <input type="text" class="input" id="lastname" name="lastname" placeholder="Last Name"><br>
        <input type="text" class="input lower" id="address" name="streetnumber" placeholder="Street / Number"><br>
        <input type="text" class="input lower" id="city" name="city" placeholder="City"><br>
        <input type="text" class="input lower" id="country" name="country" placeholder="Country"><br>
        <button type="submit" onclick="return validate()">Add User</button>
      </form>
    </div>
  </center>
</div>

请对此进行测试并告诉我为什么它不起作用。我尝试了一切,但不知何故我的 js 没有触发。我改变了身份证和一切。另外,告诉我我是否在表单中通过验证默认值做了正确的事情,因为我是第一次这样做。非常感谢大家。

我使用 body onload(启动谷歌地图)但我没有粘贴该部分,它工作正常。

请帮我举个例子, 非常感谢社区!!!

【问题讨论】:

  • 它工作正常。不知道你为什么要调用 validate() 两次。第一个在onsubmit 上,然后在按钮上单击本身。但无论如何。您可以轻松添加alert("1") 以确保。我在这里看到的唯一一件事是您正在尝试比较 null 的值,因为在您的情况下 value 不会为 null。
  • 是什么让你认为它没有?
  • 它将返回一个空字符串。您可以检查字符串长度或是否为空 == ''

标签: javascript html css validation require


【解决方案1】:

您的函数validate 调用得很好,但其中的一些语句执行得不是很好。这里有几个问题:

1- 要将类添加到元素p,请使用p.classList.add("className")

2- 当用户将名称字段留空时,该值为空字符串 (''),而不是 null。所以,不要检查:

if (name === null)

改为检查:

if(name == '')

//or, even shorter:
if(!name)

因此,JS变成了:

function validate() {
  var name = document.getElementById("name").value;
  var p = document.getElementById("pname");

  console.log("validating");

  if (!name) {
    p.classList.add( "show");
    return false;
  } else {
    return true;
  }
}

【讨论】:

    【解决方案2】:
    • 首先,在您的标签正文中,您正在调用一个尚未定义的函数。
    • 在表单的onclick 的第二个位置,您将返回functionCall(),当它只是需要该功能时。没有返回这个词。
    • 第三,我不知道你有没有看到,但你的 HTML 中有很多重复的 id,而你只能有 1 个 ID(这就是为什么它被称为 ID)
    • 最后,我建议将您的函数 validate 更改为如下内容:
    function validate() {
        console.log("eslloooooooo")
        var name = document.querySelector("#name").value;
        var p = document.querySelector("#pname");
    
        if (name.innerHTML === '') {
            p.classList.add("show");
        }
    }
    

    我推荐它,因为首先,您可以使用querySelector,它使用 CSS 选择器,也可以使用节点的选项 classList 为您的项目添加一个类。

    希望对您有所帮助

    【讨论】:

    • 如果您想使用 Text 来引用表单的输入(这就是我认为您重复了很多 ID 的原因),您可以检查标签
    【解决方案3】:

    onclick 不应返回任何内容,因此您可以删除 () 并只保留函数名称

    <button type="submit" onclick="return validate()">Add User</button>
    <!-- Should be -->
    <button type="submit" onclick="validate">Add User</button>
    

    此外,当您应该检查空字符串时,您正在检查 null

    if (name === null) { ... }
    // Should be
    if (name === '') { ... }
    

    【讨论】:

      【解决方案4】:

      看起来你是在加载正文时调用 initialize()(在你的 HTML 中),而你应该调用 validate() 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-14
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 2017-07-22
        • 1970-01-01
        相关资源
        最近更新 更多