【问题标题】:Firefox still keeps an input field with a red border though I removed it尽管我将其删除,Firefox 仍然保留带有红色边框的输入字段
【发布时间】:2020-01-14 06:33:30
【问题描述】:

我正在做一个项目,该项目要求我让用户在模态视图中插入一些数据,然后将其保存。

整个过程必须经过一个验证过程,如果它发现任何类型的错误,它将使用以下 CSS sn-p 框突出显示。

.erroreEvidenziato {
    border: 1px solid red;
}

模态视图的 HTML 代码如下所示

<div id=nuovaAssociazione class="modal">
  <div class="modal-content small smallModalAgency">
    <div class="title">
      <span class="info">
          <em>* </em> {{#i18n}}mandatoryField{{/i18n}}
      </span>
      <h3 id="titoloModale"></h3>
      <input type="hidden" id="idAgency" value="">
    </div>
    <div id="message" class="erroreModaleDiv" style="display:none;">
      <span class="error">{{#i18n}}overlappingDates{{/i18n}}</span>
    </div>
    <table class="modify">
      <tr>
        <td class="label">{{#i18n}}agencyName{{/i18n}}
          <span class="error-drop errorModaleAgency" id="selezioneAgency" style="display:none;">{{#i18n}}mandatoryField{{/i18n}}</span>
        </td>
        <td><input name="agency" style="width:330px;height:25px;" maxlength="35" id="agency">
          <div id="test"></div>
        </td>
        <td><input type="hidden" id="supplier_id" name="supplier_id" {{#supplier_id}}value="{{supplier_id}}" {{/supplier_id}}/></td>
      </tr>
      <tr>
        <td class="label">{{#i18n}}agencyPort{{/i18n}}
          <span class="error-drop errorModaleAgency" id="selezionePorto" style="display:none;">{{#i18n}}mandatoryField{{/i18n}}</span>
        </td>
        <td>
          <select name="porto" class="select2" maxlength="35" id="porto">
            <option value="">...</option>
            {{#porti}}
            <option value="{{portcode}}">{{portname}}</option>
            {{/porti}}
          </select>
        </td>
      </tr>
      <tr>
        <td class="label">{{#i18n}}agencyDivision{{/i18n}}
          <span class="error-drop errorModaleAgency" id="selezioneBuyergroup" style="display:none;">{{#i18n}}mandatoryField{{/i18n}}</span>
        </td>
        <td>
          <select name="buyergroup" class="select2" style="width: 182px; !important;" maxlength="35" id="buyergroup">
            <option value="">...</option>
            {{#buyergroups}}
            <option value="{{value}}">{{label}}</option>
            {{/buyergroups}}
          </select>
        </td>
      </tr>
      <tr>
        <td class="label">{{#i18n}}periodoValiditaDa{{/i18n}}
          <span class="error-drop errorModaleAgency" id="selezioneValidityDa" style="display:none;">{{#i18n}}mandatoryField{{/i18n}}</span>
        </td>
        <td><input name="releaseDate" id="validity_da" type="text" size="10" value="" required="" class="" style="width:195px;height:25px;"></td>
      </tr>
      <tr>
        <td class="label">{{#i18n}}periodoValiditaA{{/i18n}}
          <span class="error-drop errorModaleAgency" style="display:none;" id="selezioneValidityA">{{#i18n}}mandatoryField{{/i18n}}</span>
        </td>
        <td><input name="releaseDate" id="validity_a" type="text" size="10" value="" required="" style="width:195px;height:25px;"></td>
      </tr>
      <tr>
        <td colspan=3>
          <input class="btn" type="button" value="{{#i18n}}save{{/i18n}}" onclick="saveAssociazione();" />
          <input class="btn" id="annullaModifica" type="button" value="{{#i18n}}annulla{{/i18n}}" onclick="closeModal('nuovaAssociazione');" />
        </td>
      </tr>
    </table>
  </div>
</div>

这就是模态的样子

saveAssociazione() 方法将负责保存新记录,如下所示

    function saveAssociazione() {
        $(".erroreModaleDiv").hide();
        $("#agency").removeClass("erroreEvidenziato");
        $("#porto").removeClass("erroreEvidenziato");
        $(".SumoSelect").removeClass("erroreEvidenziato");
        $("#buyergroup").removeClass("erroreEvidenziato");
        $("#validity_da").removeClass("erroreEvidenziato");
        $("#validity_a").removeClass("erroreEvidenziato");
        $("#selezioneAgency").hide();
        $("#selezionePorto").hide();
        $("#selezioneValidityDa").hide();
        $("#selezioneValidityA").hide();
        $("#selezioneBuyergroup").hide();
        var gotError = false;
        var agency = $("#agency").val();
        debugger;
        if (agency == null || agency == undefined || agency == "") {
            $("#agency").addClass("erroreEvidenziato");
            $("#selezioneAgency").show();
            gotError = true;
        }
        var porto = $("#porto").val();
        if (porto == null || porto == undefined || porto == "") {
            $("#selezionePorto").show();
            $(".SumoSelect").addClass("erroreEvidenziato");
            gotError = true;
        }
        var buyergroup = $("#buyergroup").val();
        if (buyergroup == null || buyergroup  == undefined || buyergroup == "") {
            $("#selezioneBuyergroup").show();
            $("#buyergroup").addClass("erroreEvidenziato");
            gotError = true;
        }
        var validityDa = $("#validity_da").val();
        if (validityDa == null || validityDa == undefined || validityDa == "") {
            $("#selezioneValidityDa").show();
            $("#validity_da").addClass("erroreEvidenziato");
            gotError = true;
        }
        var validityA = $("#validity_a").val();
        selezioneValidityA
        if (validityA == null || validityA == undefined || validityA == "") {
            $("#selezioneValidityA").show();
            $("#validity_a").addClass("erroreEvidenziato");
            gotError = true;
        }
        if (gotError) {
            return;
        }
        debugger;
        [...]
   }

如果某些字段尚未填写,这就是模态框的外观。

现在,如果我退出模式,所有 erroreEvidenziato 类都会被删除

function closeModal(modal) {
    $(".erroreModaleDiv").hide();
    if (modal === 'nuovaAssociazione') {
        $("#selezioneAgency").hide();
        $("#agency").removeClass("backGrInput");
        $("#buyergroup").removeClass("backGrInput");
        $("#port").removeClass("backGrInput");
        $("#agency").removeClass("erroreEvidenziato");
        $("#porto").removeClass("erroreEvidenziato");
        $(".SumoSelect").removeClass("erroreEvidenziato");
        $("#buyergroup").removeClass("erroreEvidenziato");
        $("#validity_da").removeClass("erroreEvidenziato");
        $("#validity_a").removeClass("erroreEvidenziato");
        $("#selezionePorto").hide();
        $("#selezioneValidityDa").hide();
        $("#selezioneValidityA").hide();
        $("#selezioneBuyergroup").hide();
        $("#porto")[0].sumo.unSelectAll();
        $("#porto")[0].sumo.enable();
        $("#agency").val("");
        $("#supplier_id").val("");
        $("#buyergroup").val("");
        $("#validity_da").val("");
        $("#validity_a").val("");

        $("#agency").attr("disabled", false);

        $("#buyergroup").attr("disabled", false);
    }
    $('#'+modal).hide();
}

这是我的问题。在 Firefox(我目前有 69 版)上,如果我保存了一些未填写的字段的记录,然后退出模式并重新打开它,这就是我得到的。

这几乎就像 erroreEvidenziato 类没有被删除,但如果我在元素上使用 Firefox 检查器,我看不到任何可以远程提醒红色边框的东西。

这发生在两个 jQuery 的日期选择器上,它们是这样初始化的。

                $("#validity_a").datepicker({
                    showWeek: true,
                    firstDay: 1,
                    changeMonth: true,
                    changeYear: true,
                    showButtonPanel: true,
                    dateFormat: 'dd/mm/yy'});

                $("#validity_da").datepicker({
                    showWeek: true,
                    firstDay: 1,
                    changeMonth: true,
                    changeYear: true,
                    showButtonPanel: true,
                    dateFormat: 'dd/mm/yy'});

可能出了什么问题?

【问题讨论】:

  • 与您的问题无关,但您应该使用类,它会减少大量重复代码
  • 该项目不支持 ES6 :(
  • 类不需要 es6(如 css 类)
  • 哦,太好了,不知道这个!感谢您的提示

标签: javascript jquery html css firefox


【解决方案1】:

required 属性可以使浏览器验证字段并在其上放置自己的 css。如果您使用的是自定义验证,那么您可能需要删除此属性以阻止浏览器也对其进行验证

More information about html5 form validation

或者,您可以使用以下方式覆盖样式:

input:invalid {
   border ... 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 2011-08-21
    • 2014-05-03
    • 2020-08-04
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    相关资源
    最近更新 更多