检查输入字段是否包含特定文本
我试图找出用户输入到输入字段的内容是否包含某些文本 – 我有点工作,但只能用于完全匹配而不是部分匹配。 如果用户在匹配的文本之前键入任何内容,当然代码不会触发。
我需要做的是在输入字段中检查输入是否包含@nyu.edu
。
$('.email').keyup(function(){ if ($(".email").val() == "@nyu.edu") { $("p.warning").css("visibility", "visible"); } else if ($(".email").val() != "@nyu.edu") { $("p.warning").css("visibility", "hidden"); } });
检查字符串是否包含子字符串很容易通过取haystack.indexOf(needle)
并检查-1
(未找到)来完成。
if ($(".email").val().indexOf("@nyu.edu") !== -1) { // contains } else { // does not contain }
ES6草案中有一个function,您可能会发现它更自然,称为includes
您可以添加对ES6的 String.prototype.includes
支持
if (!String.prototype.includes) { String.prototype.includes = function (needle, pos) { return this.indexOf(needle, pos || 0) !== -1; }; } "foobar".includes('foo'); // true
工作前:
http://codepen.io/anon/pen/XJKMjo
$('.email').keyup(function() { var exp = /@nyu\.edu$/; // reg ex var input = $(this).val(); // email input var matches = exp.test(input); // boolean // changes to hidden or visible $("p.warning").css("visibility", (matches) ? "visible" : "hidden"); });
您可以使用jQuery基于HTML元素的属性内容进行过滤,以包含,开始或结束您想要的字符串。 要使用包含字符串的属性匹配元素,您需要在jQuery选择器中使用[attr*="value"]
,但我认为您需要一些结尾与您的字符串匹配的内容。 这是如何工作:
var elements = $(".email[value$='@nyu.edu']"); if(elements.length > 0) { // Do something with the elements, such as removing an .error class } else { // Email doesn't end with @nyu.edu }
阅读有关jQuery结尾的更多信息- 使用属性选择器或浏览其他属性选择器 。
jsBin演示
var $warning = $("p.warning"); // PS make sure not to target a wrong .warning! $('.email').on("input", function(){ $warning.toggle( /@nyu\.edu/ig.test(this.value) ); });
正如我所提到的。 .warning
是一个类可以代表任何第一次.warning
发生。 使用相当一些其他选择器,如.next()
或.closest(selector).find(".warning")
如果你的客户失去了$$$,你的老板会解雇你,因为你忘了看复制粘贴案件。 ;)开玩笑,使用"input"
事件。
PS使用.warning{display:none;}
而不是visibility