【问题标题】:Form using javascript make field required?使用 javascript make 字段的表单是必需的吗?
【发布时间】:2013-06-29 13:23:06
【问题描述】:

我有一个使用 javascript 文件 items.js 来添加新项目的表单。因此,每次使用 form.php 并单击“添加项目”按钮时,都会显示新的字段行以添加详细信息。

所以例如下面的一些代码来添加字段项名称。

newCell = newRow.insertCell(3);
newCell.innerHTML = '<input class="item_text_area item_name" type="text" name="0_item_' + new_item + '" id="0_item_' + new_items + '" size="20" maxlength="250" />';

如何编辑此.js 文件以使项目名称字段成为必填项?

任何帮助将不胜感激。

【问题讨论】:

  • 您想添加某种警报还是只是想向用户表明它是必填字段?
  • 对于未使用 items.js 的表单的其余部分,我可以添加 class="blah required" 它将停止提交表单,同时让用户知道某个字段是必须的。我希望表单的 .js 部分表现相同。

标签: javascript html forms validation


【解决方案1】:

Per Jeevan:由于您无法确定用户提交了多少项目,我会选择一种方法,让所有新项目都具有唯一的类,例如 dynamicAddedItems

正如 Jeevan 已经说过的,您可以在表单标签中添加以下内容,以防止它在返回 false 时提交。

<form onsubmit="return validate();"></form>

使用javascript:

function validate(){
  var elems = document.getElementsByClassName( 'dynamicAddedItems' );
  var allgood = true;

  //Loop through all elements with this class
  for( var i = 0; i < elems.length; i++ ) {
    if( !elems[i].value || !elems[i].value.length ) {
      elems[i].className += " error";
      allgood = false;
    } else {
      elems[i].className = "item_text_area item_name dynamicAddedItems";
    }
  }

  //If any element did not meet the requirements, prevent it from being submitted and display an alert
  if( !allgood ) {
    alert( "Please fill in all the required fields." );
    return false;
  }

  //Otherwise submit the form
  return true;
}

如果字段为空,此脚本将添加错误类并阻止提交表单。如何显示具有此类的字段由您决定。

【讨论】:

  • @axon111 请使用评论部分提出改进建议(只要您有权添加 cmets)。您添加的 break 语句将防止突出显示所有错误的字段,这不是代码应该工作的方式。
【解决方案2】:

您可以为此使用 jquery。添加一个类,在本例中为“requiredAttr”到必填字段,然后在表单提交时进行验证。

<form onsubmit="return validate();">
  First Name*: <input class="requiredAttr" type="text" /><br/>
  Last Name: <input type="text" /><br/>
  <input type="submit" />
</form>

function validate(){
$(".requiredAttr").each(function(){
    if($(this).val().length < 1){
        alert("please fill in all the required fields.");
        $(this).focus();
        return false;
    }
    else{
        return true;
    }
});
return false;
}

这是一个工作小提琴。它还将焦点放在验证警报之后的第一个未填充字段:

http://jsfiddle.net/YG6mk/2/

【讨论】:

  • -1 如果用户没有声明他们使用 jQuery,则需要使用“原始”javascript 的答案。如果您也将所有相关代码也放入您的答案中,那就太好了,因为 jsfiddle 直到永远都不可用。
  • @Sumurai8 首先,OP 没有提到他没有使用 jquery。其次,如果有更好/更容易/更快/等。做某事的方式,指出它总是一件好事。这就是为什么我们都在这里,来提供帮助。关于 jsfiddle,最好使用一个工作示例。这不应该永远在这里。如果您认为 jsfiddle 不会永远存在,那么是什么让您认为 SO 会存在?
  • 将鼠标悬停在 javascript 标记上。
  • @Sumurai8 javascript 文件,一个 .js 文件。伙计,我想知道 jquery 文件使用什么扩展名。
  • SO 在永恒之前是否可用并不重要。如果没有 jsfiddle,您的答案对于其他有相同问题的人来说毫无价值。 jsfiddle 很可能最终会清理所有未使用的 jsfiddle,这意味着您的答案将大部分消失。 Jsfiddle 应该是一个补充。
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2015-08-29
  • 2019-06-11
  • 1970-01-01
  • 2022-10-15
  • 2023-02-07
  • 2011-08-13
相关资源
最近更新 更多