是否有验证程序来检查是否已使用运算符?

时间:2019-01-31 14:10:36

标签: javascript html

我正在尝试在JS中找到一个验证器,以检查是否已使用运算符(我们正在制作一个简单的计算器),所以我试图创建一个函数checkOperator(),但这是死定的-end,当我使用它时,它什么也没做。

function checkOperator(){
     var operation = document.getElementsByClassName("operator");
     var string = document.getElementsByName('show');
     var lastChar = string.charAt(string.length-1);
 
     if(lastChar === operation){
         var restring =string.replace(operation,operation);
         return restring;
     }
}
    <div id="cursor" class="rekenmachine">
          <form name="rekenmachine">     
            <div>
              <input id="cursor" type="text" name="show" value="">
              <input id="cursor" type="button" name="Clear" value="C" onclick="rekenmachine.show.value =''">
            </div>
            <div class="input">
              <input id="cursor" type="button" value="7" onclick="rekenmachine.show.value +='7'">
              <input id="cursor" type="button" value="8" onclick="rekenmachine.show.value +='8'">
              <input id="cursor" type="button" value="9" onclick="rekenmachine.show.value +='9'">
              <input id="cursor" type="button" class="operator" value="/" onclick="rekenmachine.show.value +='/'">
            </div>
         </form>
    </div>

我希望只能放置一个运算符,因为如果多个运算符彼此相邻,则Eval无法计算字符串。

2 个答案:

答案 0 :(得分:0)

function checkOperator(){
  var operation = document.getElementsByClassName("operator");
  var string = document.getElementsByName('show')[0].value;
  console.log(string);
  if(string.indexOf('/') > -1){
     // here you can do what you want
     alert('yes'); 
   }else{
     alert('no');
   } 
 }
 $(document).ready(function(){
    $(document).click(function(){
       checkOperator();
     });

 });

答案 1 :(得分:0)

代码中的主要问题是您需要使用value(和[0])来访问getElementsByNamegetElementsByClassName的(第一个)元素的实际文本。参见How do I get the value of text input field using JavaScript?

(我建议使用id和getElementById()来获取唯一元素,而不必使用[0]

而且,在我看来,使用“字符串”作为标识符也是一个坏主意。

function checkOperator(){
     var elementShow = document.getElementsByName('show')[0];
     var text = elementShow.value;
     var lastChar = text.charAt(text.length-1);
 
     if(lastChar !== '/'){
         elementShow.value = text + '/'
     }
}
<div id="cursor" class="rekenmachine">
          <form name="rekenmachine">     
            <div>
              <input id="cursor" type="text" name="show" value="">
              <input id="cursor" type="button" name="Clear" value="C" onclick="rekenmachine.show.value =''">
            </div>
            <div class="input">
              <input id="cursor" type="button" value="7" onclick="rekenmachine.show.value +='7'">
              <input id="cursor" type="button" value="8" onclick="rekenmachine.show.value +='8'">
              <input id="cursor" type="button" value="9" onclick="rekenmachine.show.value +='9'">
              <input id="cursor" type="button" class="operator" value="/" onclick="checkOperator()">
            </div>
         </form>
    </div>

备注:

我通过在此处显式使用'/'简化了逻辑。

您可以使用document.getElementsByClassName("operator")[0].value;来获得运算符,但是如果您有多个运算符,逻辑将比这复杂一些。 (由于您不只是要测试相同运算符的重复性,因此您不能拥有+-/和不能拥有//相同。

但这将是另一个问题;)