Javascript JS/JQuery:动态添加";“模式”;及;标题「;属性以形成输入

Javascript JS/JQuery:动态添加";“模式”;及;标题「;属性以形成输入,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我有多个表单输入元素。我想为每个表单输入添加一个pattern属性和一个title属性,但不是手动添加,而是使用JavaScript/jQuery将相同的pattern和title动态添加到每个表单输入中 这就是表单输入字段现在的样子: <input type="text" class="form-control" id="paycheck" /> <input type="text" class="form-control" id="investments" /> &l

我有多个表单输入元素。我想为每个表单输入添加一个
pattern
属性和一个
title
属性,但不是手动添加,而是使用JavaScript/jQuery将相同的
pattern
title
动态添加到每个表单输入中

这就是表单输入字段现在的样子:

<input type="text" class="form-control" id="paycheck" />
<input type="text" class="form-control" id="investments" />
<input type="text" class="form-control" id="otherIncome" />

最后,我发现语法是正确的。代码中的其他地方出错,无法运行该语句。这表明您应该首先确保代码中其他地方的一切都是好的

然而,我确实从中学到了一些东西,我将为其他人指出:

  • jQuery
    .attr()
    函数将动态添加您指定的任何属性,因此您无需在表单元素中首先添加或更改值
  • 重要的是,如果要使用jQuery动态添加正则表达式,则需要转义某些字符
  • 正则表达式最初是
    \d*\.?\d*
    ,但在DOM中它显示为
    d*?d*
    ,因此当通过jQuery发送正则表达式时,我避开了如下反斜杠:
    \\d*\.?\\d*

  • 最后,我不必使我的字段成为正则表达式工作所必需的字段。HMTL5验证仅在我在字段中包含不正确的文本时为我抛出错误,当它抛出错误时,表单未提交。如果我将字段留空或在字段中输入正确的文本,则不会抛出错误。如果我错了,我需要一个解释

  • 对我来说似乎很好->嗯,你是对的。。。这很奇怪……当然,模式实际上只对经过验证的表单中的必需元素有用。这些元素需要是必需的吗?将模式attr添加到初始元素中。Other wise.attr不会添加属性本身<代码>为每个匹配的元素设置一个或多个属性。。只需在输入元素上将attr留空,如
    pattern=”“
    。正则表达式
    \d*.?\d*
    匹配零个或多个数字,然后匹配零个或一个句号,然后匹配零个或多个数字-因此空字符串(或单个句号字符)将由它匹配并成为有效输入。如果你想让它成为一个需要的数字,那么使用
    \d+(\.\d*)?\.\d+
    ,它将以各种格式匹配数字,包括:
    01234
    01234.
    012.34
    01234
    ,但不会匹配空字符串或单个句号字符。@MT0完美。谢谢我甚至不知道一个句号就行了。您的正则表达式工作得更好。
    \
    是字符串和正则表达式的转义字符,您要将字符串传递给
    .attr()
    ,以便在正则表达式中使用,那么您需要转义字符串中的转义字符(即使用
    \
    ),以便它仍然存在于正则表达式中。如果比较在JavaScript中声明正则表达式的两种不同方式,您可以看到相同的结果:使用正则表达式文本
    /\d+/
    与将字符串传递给
    RegExp
    对象
    新RegExp('\\d+')的构造函数
    -两者都创建相同的RE,但需要对字符串进行双转义,而不是对文本进行双转义。我遇到的问题是由于反斜杠。我通过将它们加倍来逃避它们,这解决了我的问题。
    <input pattern="\d*\.?\d*" title="blah blah blah" type="text" class="form-control" id="paycheck" />
    etc...
    
    $( "input" ).attr("pattern", '\d*\.?\d*');
    $( "input" ).attr("pattern",  \d*\.?\d* );
    $( ".formClass input" ).attr("pattern", '\d*\.?\d*');
    
    $( "input" ).prop("pattern", '\d*\.?\d*');
    $( "input" ).prop("pattern",  \d*\.?\d* );
    $( ".formClass input" ).prop("pattern", '\d*\.?\d*');
    
    ...imagine something similar for the title attribute...