当数据输入需要一些验证时,每个人都需要一点帮助。今天,我们提供了一种方法,根据用户的输入给用户一些数据提示。

获得高级管理人员手册的重要趋势、技巧和战略,以竞争和赢得数字经济。

当数据输入需要一些验证时,每个人都需要一点帮助。今天,我们提供了一种方法,根据用户的输入给用户一些数据提示。

asp.net中repeater控件的使用(MVC自动填充控件第1部分)(1)

在最近的一个项目中,我被要求创建一个带有“永久占位符”的文本框。

whaaaaa吗?

所以我决定继续跟进,询问他们是什么意思。

“你知道……因此,当用户不知道公司的正确名称时,他们可以得到提示。

“当他们打字时,会在文本框中显示一个可能的公司名称。”

在搜索之后,我从Geoff Graham的CSS技巧中找到了这个例子。这正是他们所谈论的,但无济于事。

看到的第一个名字吗?他们输入第一个字母,建议把剩下的字母作为突出的文本显示出来。

它所做的唯一一件事就是给我提供我所需要的功能。

GIF动画是最终的目标,但如何做到这一点是一个难题。

要求自动填充

让我们检查一下如何让这个文本框起作用。

  1. 当他们开始键入公司名称时,他们可能会停下来考虑拼写,并要求提示。

  2. 我们应该检查数据库的部分公司名称。

  3. 在文本框中显示高亮显示或灰色显示的建议。

  4. 一旦他们对自己的输入感到满意,他们就会点击tab进入下一个领域,他们的公司名称就会被接受。

1 2和4并不难。3是这个问题。

为什么?

如果我们想要使用灰色的文本,而不是突出显示的文本,那么文本框中就没有一种方法可以将文本显示为一种颜色,而另一种颜色的建议则是另一种颜色。

高亮文本可能是实现这一点的更好方法,但是当我们到达它的时候,我们会跨越那个灰色的桥。

概述

首先,我们需要一个文本框。

@using (Html.BeginForm())

{

<div class="form-group">

<div class="row">

<div class="col-md-4">

@Html.Label("Company", "company:")

<span class="autofill">

@Html.TextBox("CompanyTextBox", String.Empty, new

{

@class = "form-control input-sm"

})

</span>

<p class="help-block">Enter the company name (i.e. Apple, Microsoft).</p>

</div>

</div>

</div>

}

繁荣!完成了!

进行呼叫!

接下来,我们需要一个API来根据输入检索我们的公司。我使用一个假的数据库调用创建了一个服务控制器(您可以根据您认为合适的方式修改它)。

我添加了一个名为Servicescontroller的新项目(Web API控制器类)。

using System.Collections.Generic;

using System.Linq;

using Microsoft.AspNetCore.Mvc;

namespace AutofillDemo

{

[Route("api/[controller]")]

public class ServicesController : Controller

{

// GET api/<controller>/5

[HttpGet("{id}")]

public List<string> Get(string id)

{

var partialCompanyName = id;

// Create a repository to access your database here.

// For now, we'll create a small list

// of companies for demonstration purposes.

var list = new List<string>

{

"Apple",

"Microsoft",

"Google",

"MicroCenter",

"Microtek",

"MicroSystems"

};

var company = list.OrderBy(e => e).FirstOrDefault(e =>

e.startsWith(partialCompanyName));

// if company is null, use an empty string.

// Else, use the company. :-)

return new List<string> { company ?? "" };

}

}

}

我从API中删除了附加的HTTP谓词,因为我们现在不需要它们。

由于我们已经构建了web服务,您可以通过运行应用程序并在浏览器中输入http://localhost:/api/Services/Micro,来测试它。我们的服务应该还回来。“MicroCenter。”

完美!

一些(JavaScript)组装要求

现在我们已经有了HTML和web服务,我们需要JavaScript来实现这个奇迹。

我们的一个要求是,我们需要给用户足够的时间来完成输入。一旦他们停下来,给他们一两秒钟想想。

对于这个功能,我们需要在某个延迟之后执行一个函数。

我们还需要一个函数来突出(或选择)其余的字符,这样我们就可以继续输入提示信息了。

$.fn.delayKeyup = function (n, t) {

var i = 0;

return $(this).keyup(function () {

clearTimeout(i);

i = setTimeout(n, t);

}),

$(this)

};

$.fn.selectRange = function (start, end) {

return this.each(function () {

if (this.setSelectionRange) {

this.focus();

this.setSelectionRange(start, end);

} else if (this.createTextRange) {

var range = this.createTextRange();

range.collapse(true);

range.moveEnd('character', end);

range.moveStart('character', start);

range.select();

}

});

};

当然,您需要jQuery来实现这些功能。

selectRange检查我们在if语句中使用哪个浏览器。

让我们设置事件来使用这些函数。

$(function() {

var company = $("#CompanyTextBox");

$(company).delayKeyup(function() {

var partialCompanyName = $(company).val();

// if there's nothing there, don't do anything.

if (partialCompanyName.length === 0) {

return false;

}

// grab company names based on the partial

$.getJSON("/api/Services/" partialCompanyName)

.done(function(data) {

if (data) {

var returnedCompany = data[0];

// Remaining highlighted characters

$(company).val(returnedCompany);

$(company).selectRange(partialCompanyName.length,

returnedCompany.length);

}

})

.fail(function() {

console.log("error");

});

}

, 1000);

});

获取用户输入后,我们检查它是否为空。如果是的话,停止你正在做的事情,然后返回false。

在验证输入之后,我们通过我们的API请求返回公司名称。

我们将返回的公司名称设置在文本框中,并根据用户的输入设置所选字符的范围。

底部的1000是1秒超时。你可以自行决定,但不要让他们等待太久。

结论

虽然我们可以使用建议下拉,但我觉得这是一个挑战,给用户提供提示,而不需要点击下拉菜单。

这种特殊的技术让我思考——我们可以通过把突出显示的字符(如本文开头所提到的),让它们变得更透明,就像一个占位符吗?

怎么可能呢?我有个主意,请继续。

你认为你知道如何做透明的占位符吗?我们需要CSS吗?在下面发表你的评论,让我们讨论一下。

,