简体   繁体   English

Typescript 错误“类型‘HTMLElement’上不存在属性‘值’”、“‘元素’类型上不存在属性‘onclick’”

[英]Typescript error "Property 'value' does not exist on type 'HTMLElement'", "Property 'onclick' does not exist on type 'Element'"

I am trying to put in a typescript file, then these "Property 'value' does not exist on type 'HTMLElement'", "Duplicate function implementation."我试图放入一个 typescript 文件,然后这些“属性‘值’在类型‘HTMLElement’上不存在”、“重复 function 实现”。 and "Property 'onclick' does not exist on type 'Element'" appear on my screen as compilation error but when I tried to run in javascript file it works very well.和“属性‘onclick’在‘元素’类型上不存在”作为编译错误出现在我的屏幕上,但是当我尝试在 javascript 文件中运行时,它工作得很好。 https://jsfiddle.net/chrismontage/onh51g93/12/ https://jsfiddle.net/chrismontage/onh51g93/12/

<label for = "password">New Password</label>
<input type="password" class = "input" id = "password1" value="">
<label for = "cnfm-password">Confirm Pasword</label>
<input type="password" class = "input" id = "password2">
<input onclick = "verifyPassword()" type="submit" value = "Save Changes"class = "btn" id = "myBtn">
          
 <!-- The Modal -->
<div id="myModal" class="modal">

  <!-- Modal content -->
  <div class="modal-content">
    <div class="modal-header">
      <img src="/images/logo.png" alt="SAMPLE" width="120" class = "mx-auto">
      <span class="close">&times;</span>
    </div>
    
    <div class="modal-body">
      <h4 class = "text-center"><span id = "message1"></span></h4>
    </div>
    <div class="modal-footer mx-auto">
      <button class = "btn" id = "confirm">Okay</button>

    </div>
  </div>
</div>

ts file文件

function verifyPassword(){
    var pw1 = document.getElementById("password1");
    var pw2 = document.getElementById("password2");
    
    // Get the modal
    var modal = document.getElementById("myModal");
    
    // Get the button that opens the modal
    var btn1 = document.getElementById("myBtn");
    
    var confirm = document.getElementById("confirm");
    
    // Get the <span> element that closes the modal
    var span = document.getElementsByClassName("close")[0];
    
    
    btn1.onclick = function () {
        
        modal.style.display = "block";
    
        //check empty password field
    
        if(pw1.value == "") {
            document.getElementById("message1").innerHTML = "Please put your new password!";
            return false;
        }
    
        //minimum password length validation
        if(pw1.value.length < 8) {
            document.getElementById("message1").innerHTML = "Password length must be atleast 8 characters";
            return false;
        }
    
        //maximum length of password validation
        if(pw1.value.length > 15) {
           document.getElementById("message1").innerHTML = "Password length must not exceed 15 characters";
           return false;
        } else {
           if(pw1.value == pw2.value){
               document.getElementById("message1").innerHTML=  "Passwords match!";
           }
        
           else {
               document.getElementById("message1").innerHTML=  "Passwords not match!";
           }
        }
    
    }
    
    confirm.onclick = function () {
        modal.style.display = "none";
    }
    
    // When the user clicks on <span> (x), close the modal
    span.onclick = function() {
        modal.style.display = "none";
      }
    
      // When the user clicks anywhere outside of the modal, close it
    window.onclick = function(event) {
        if (event.target == modal) {
          modal.style.display = "none";
    }
    }
}
/* The Modal (background) */
.modal {
  display: none; /* Hidden by default */
  position: fixed; /* Stay in place */
  z-index: 1; /* Sit on top */
  padding-top: 100px; /* Location of the box */
  left: 0;
  top: 0;
  width: 100%; /* Full width */
  height: 100%; /* Full height */
  overflow: auto; /* Enable scroll if needed */
  background-color: rgb(0,0,0); /* Fallback color */
  background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
}

/* Modal Content */
.modal-content {
  position: relative;
  background-color: #fefefe;
  margin: auto;
  padding: 0;
  border: 1px solid #888;
  max-width: 40%;
  box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
  -webkit-animation-name: animatetop;
  -webkit-animation-duration: 0.4s;
  animation-name: animatetop;
  animation-duration: 0.4s
}

/* Add Animation */
@-webkit-keyframes animatetop {
  from {top:-300px; opacity:0} 
  to {top:0; opacity:1}
}

@keyframes animatetop {
  from {top:-300px; opacity:0}
  to {top:0; opacity:1}
}

/* The Close Button */
.close {
  color: white;
  float: right;
  font-size: 28px;
  font-weight: bold;
}

.close:hover,
.close:focus {
  color: $color5;
  text-decoration: none;
  cursor: pointer;
}

.modal-header {
  
  background-color: $color1;
  color: white;
  text-align: center;
}

.modal-header h2 {
    color: $color1;
    text-align: center;
}

.modal-body {
    padding: 2px 16px;
  }

  .modal-body h4 {
      font-family: $font1;
      font-weight: normal;
      color: $color4;
      font-size: 20px;
  }

.modal-footer {
  padding: 2px 16px;
  color: white;
}

.modal-footer .btn {
    background-color: $color1;
    font-family: $font1;
    font-weight: normal;
    color: $color3;
}

.modal-footer .btn:hover{
    color: $color5;
}

Have you tried to follow: https://stackoverflow.com/a/12990166/13309686您是否尝试过关注: https://stackoverflow.com/a/12990166/13309686

The code would look like this:代码如下所示:



function verifyPassword(){
    var pw1 = (<HTMLInputElement>document.getElementById("password1")).value;
    var pw2 = (<HTMLInputElement>document.getElementById("password2")).value;
    
    // Get the modal
    var modal = <HTMLInputElement>document.getElementById("myModal");
    
    // Get the button that opens the modal
    var btn1 = <HTMLInputElement>document.getElementById("myBtn");
    
    var confirm = <HTMLInputElement>document.getElementById("confirm");
    
    // Get the <span> element that closes the modal
    var span = <HTMLInputElement>document.getElementsByClassName("close")[0];
    
    
    btn1.onclick = function () {
        
        modal.style.display = "block";
    
        //check empty password field
    
        if(pw1 == "") {
            document.getElementById("message1").innerHTML = "Please put your new password!";
            return false;
        }
    
        //minimum password length validation
        if(pw1.length < 8) {
            document.getElementById("message1").innerHTML = "Password length must be atleast 8 characters";
            return false;
        }
    
        //maximum length of password validation
        if(pw1.length > 15) {
           document.getElementById("message1").innerHTML = "Password length must not exceed 15 characters";
           return false;
        } else {
           if(pw1 == pw2){
               document.getElementById("message1").innerHTML=  "Passwords match!";
           }
        
           else {
               document.getElementById("message1").innerHTML=  "Passwords not match!";
           }
        }
    
    }
    
    confirm.onclick = function () {
        modal.style.display = "none";
    }
    
    // When the user clicks on <span> (x), close the modal
    span.onclick = function() {
        modal.style.display = "none";
      }
    
      // When the user clicks anywhere outside of the modal, close it
    window.onclick = function(event) {
        if (event.target == modal) {
          modal.style.display = "none";
    }
    }
}

It looks like DOM typing declarations are missing on your Typescript project.您的 Typescript 项目中似乎缺少 DOM 类型声明。 Could you also post your tsconfig.json ?你也可以发布你的tsconfig.json吗?

You might need to include dom into your tsconfig.json file if that's not present.如果不存在,您可能需要将dom包含到您的tsconfig.json文件中。

"lib": ["dom"]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM