javascript - 如何在页面加载而不是事件触发时执行JS?

标签 javascript html forms

我正试图想出一个 JS 来检测我的表单中的空字段数。我有 3 个字段。如果 JS 计算出 2 个或更多空字段,JS 会将 css 颜色更改为红色。如果 JS 计算出 1 个空字段,JS 会将 css 颜色更改为绿色。当我在输入字段中输入数据时,这很好用。但是,当我用两个字段中已有的数据加载页面时,颜色仍然保持红色。如何让JS在加载页面时检查输入框是否已经有值,并根据空字段的数量相应地切换颜色?

下面是页面加载时显示红色,即使只有 1 个空字段。

enter image description here

我已经查看了所有论坛,但没有解决我的问题

'''HTML'''
<table>
<tr></tr><td> Field 1: <input class="user_field" type="text" name="1[user_fname]" value="1" autofocus/></td></tr>
<tr><td>Field 2: <input class="user_field" type="text" name="1[user_lname]" value="2"/></td></tr>
<tr><td>Field 3: <input class="user_field phone" type="text" name="1[user_mobile]"/></td></tr>
<tr><td>&nbsp;</td></tr>
</table>
<div id="result"></div>

<div class="containerbox">
        <div id="centerbox1" style="background-color: #FF6C60;">
          <div class="value">
          <p><span style="color: #fff ;font-weight:bold; font-size:36px">test</span></p>
          </div>
        </div>
     </div>
</div>


'''JS'''
$(document).ready(function(){
    $('.user_field').blur(function() {
            var text = "field(s) empty";
        var count = $('.user_field').not(function() {
            return this.value;
        }).length;

        $('#result').html(count + " " + text);

        //*alert(count);

        var udata = count;

        if (udata > 2){
        document.getElementById("centerbox1").style.backgroundColor = '#FF6C60';
        }
        else  
        if (udata <= 2)
        {
        document.getElementById("centerbox1").style.backgroundColor = '#99C262';
        } 


    });
});

我希望背景颜色为绿色,因为加载页面时字段中有 2 个数据,但页面显示为红色。

最佳答案

将函数移出 blur 事件处理程序,并从 ready() 处理程序中调用它:

$(document).ready(function() {
  // Function of its own
  function checkFields() {
    var text = "field(s) empty";
    var count = $('.user_field').not(function() {
      return this.value;
    }).length;

    $('#result').html(count + " " + text);

    //*alert(count);

    var udata = count;

    $('#centerbox1').css('background-color', udata > 2 ? '#FF6C60' : '#99C262');
  }

  // Set up event handler
  $('.user_field').blur(checkFields);

  // Call function
  checkFields();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tr></tr>
  <td> Field 1: <input class="user_field" type="text" name="1[user_fname]" value="1" autofocus/></td>
  </tr>
  <tr>
    <td>Field 2: <input class="user_field" type="text" name="1[user_lname]" value="2" /></td>
  </tr>
  <tr>
    <td>Field 3: <input class="user_field phone" type="text" name="1[user_mobile]" /></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
</table>
<div id="result"></div>

<div class="containerbox">
  <div id="centerbox1" style="background-color: #FF6C60;">
    <div class="value">
      <p><span style="color: #fff ;font-weight:bold; font-size:36px">test</span></p>
    </div>
  </div>
</div>
</div>

关于javascript - 如何在页面加载而不是事件触发时执行JS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56950437/

相关文章:

javascript - 输入的动态价格金额

forms - Clojure(打嗝): How can I know which submit button got pressed in a form?

javascript - 应用 ng-class 评估 P 标签内的不同表达式

javascript - 使用 javascript 关闭弹出窗口

javascript - 将 localStorage 中的内容附加到 div 脚本后不再起作用

css - Div 滚动条 - 有什么方法可以设置它的样式吗?

javascript - 完全通过 Javascript 和插件关闭 Firefox 浏览器

尝试覆盖文件时 JavaScript 抛出错误

javascript - 根据下拉值更改复杂文本

PHP $_SERVER ['PHP_SELF' ] 在 Wordpress 中重定向到索引页面