什么';这个Javascript条件有什么问题?

什么';这个Javascript条件有什么问题?,javascript,validation,Javascript,Validation,我有一个Javascript函数,如下所示: function validateInput() { var search_text = document.getElementById('search_text').value; var size = document.getElementById('size').value; var submitButton = document.getElementById('sb_search'); submitButton

我有一个Javascript函数,如下所示:

function validateInput() {
    var search_text = document.getElementById('search_text').value;
    var size = document.getElementById('size').value;
    var submitButton = document.getElementById('sb_search');

    submitButton.removeAttribute('disabled');
    var filter = /^[\x20-\x7E]+$/;

    if (filter.test(search_text) && filter.test(size)) {
        return true;
    } else {
        submitButton.setAttribute('disabled', 'disabled');
    }
}
if (filter.test(search_text)){
    return true;
}
如果输入字段search_text和size满足正则表达式,则应允许提交表单。但即使我输入了正确的值,它也不允许我提交表单。如果我只使用这样的条件,它就会工作:

function validateInput() {
    var search_text = document.getElementById('search_text').value;
    var size = document.getElementById('size').value;
    var submitButton = document.getElementById('sb_search');

    submitButton.removeAttribute('disabled');
    var filter = /^[\x20-\x7E]+$/;

    if (filter.test(search_text) && filter.test(size)) {
        return true;
    } else {
        submitButton.setAttribute('disabled', 'disabled');
    }
}
if (filter.test(search_text)){
    return true;
}
我希望两个输入字段都满足正则表达式。我错过了什么

编辑 HTML

{%csrf\u令牌%}

    过滤您的搜索
  • 滤器 按日期 按大小
  • 日期:
  • 尺寸:

我认为您的HTML语法可能缺少一些结束或开始标记。我试图纠正他们

<form action="/search/" id="ui_element" class="sb_wrapper">
         {% csrf_token %}
  <p>  <-- missing opening p tag
   <input class="sb_input" type="text" id="search_text" name="search_text" placeholder="Search by Name ...">
    <input class="sb_search" id="sb_search" type="submit" value="Go" onclick="validateInput()" >

  </p>
  <ul class="sb_dropdown" style="display:none;">
    <li class="sb_filter">Filter your search</li>
    <li>
     <select id="selectmode" name="selectmode" class="filter">
      <option value="filter">Filter</option>
      <option value="date">By date</option>
      <option value="size">By size</option>
     </select>
    </li>
    <li class="bydateinputs" style="display: none">
     <label> Date:</label>
     <input type="text" id="date_picker" style="width:100px;" name="date" class="text_search" />
    </li>
    <li class="bysizeinputs"  style="display: none">
      <label> Size:</label>
      <input type="text" id="size" style="width:100px;" name="size" placeholder="eg: 4 MB" class="text_search" />
   </li>
  </ul>

{%csrf_令牌%}

您可能遇到的问题是“提交”按钮仍处于禁用状态。当您单击它时,您将禁用它,如果之后用户编辑其输入,则现在无法提交,因为该按钮仍处于禁用状态

当按钮被禁用时,它不会生成单击事件,因此代码不会再次运行


id为
size
的元素没有值(事实上,它甚至不可见,至少最初不可见,因为它位于样式为
display:none
的元素中),并且正则表达式不允许空字符串

将正则表达式从
/^[\x20-\x7E]+$/
更改为
/^[\x20-\x7E]*$/
,以便允许空字符串

顺便说一句:我怀疑你打算用一些你没有展示给我们的javascript使该元素可见。

称之为

onclick=“return validateInput();”

除此之外,你也不需要写else子句。。在你的JS中

你的JS可能是

function validateInput() {
    var search_text = document.getElementById('search_text').value;
    var size = document.getElementById('size').value;
    var submitButton = document.getElementById('sb_search');


    var filter = /^[\x20-\x7E]+$/;

    if (filter.test(search_text) && filter.test(size)) {
        submitButton.removeAttribute('disabled');
        return true;
    }
    return false;

}

你能用html制作一个JSFIDLE吗?你输入的“正确值”是多少?很可能它无法获取元素
大小
。。发布HTMLW您在输入字段中使用的文本应该有效,但无效?在我看来,接受的值是介于“”和“~”之间的字符序列,也不允许使用空字符串。你能发布HTML代码吗???@user2032220所以它是空字符串,我不知道id
size
的元素是如何获得值的(因为用户看不到它),但显然它没有获得值。也许你不应该有那个领域?还是显示需要修复的代码?或者它必须用javascript自动填充?无论如何,这取决于你的考虑。