查找文本框中输入的第一个字符

发布于 2024-08-21 19:39:03 字数 351 浏览 4 评论 0原文

我坚持执行以下操作:

  1. 用户开始在文本框中输入内容。
  2. 页面上的 javascript 捕获输入的第一个字符,验证它是否是英文字母 (az,AZ) 并将其转换为小写(如有必要)。
  3. 根据输入发出 XMLHttp 请求(即,如果第一个输入字符是 a,则获取 a.xml,如果 b 则获取 b.xml,依此类推)。

我知道如何执行最后一部分(发出 xmlhttp 请求),但我有点坚持如何捕获第一个字符并验证它(以适用于所有浏览器的方式)。请指导。谢谢。

说明:这是为了创建类似 Google Suggest 的自动完成下拉菜单,而不需要服务器端程序。

I am stuck in implementing the following:

  1. User starts typing in a textbox.
  2. The javascript on page captures the first character typed, validates that it is an english alphabet (a-z,A-Z) and converts it to lowercase (if necessary).
  3. Make an XMLHttp request based on the input (i.e. if first input character is a, get a.xml, if b get b.xml and so on).

I know how to do the last part (make the xmlhttp request) but am kind of stuck on how to capture the first character and validate it (in a way that works on all browsers). Please guide. Thanks.

Clarification: This is to create a Google Suggest like autocomplete-drop-down menu without the need for server side programs.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

感情废物 2024-08-28 19:39:03

像这样的东西应该可以工作:

HTML:

<input type="text" id="myField" />

And in JS:

window.onload = function() {
    document.getElementById('myField').onkeyup = function() {
        // Validate that the first letter is A-Za-z and capture it
        var letter = this.value.match(/^([A-Za-z])/);

        // If a letter was found
        if(letter !== null) {
            // Change it to lowercase and update the value
            letter = letter[0].toLowerCase();
            this.value = letter + this.value.substring(1);

            // Do the request
        }
    }
}

我的普通 JS 技能有点生疏,但这应该可以解决问题。有趣的是,这里使用 jQuery 也是一样的:

$(function() {
    $('#myField').keyup(function() {
        var letter = $(this).val().match(/^([A-Za-z])/);

        // If a letter was found
        if(letter !== null) {
            // Change it to lowercase and update the value
            letter = letter[0].toLowerCase();
            $(this).val(letter + $(this).val().substring(1);

            // Do the request
        }
    });
});

Something like this should work:

HTML:

<input type="text" id="myField" />

And in JS:

window.onload = function() {
    document.getElementById('myField').onkeyup = function() {
        // Validate that the first letter is A-Za-z and capture it
        var letter = this.value.match(/^([A-Za-z])/);

        // If a letter was found
        if(letter !== null) {
            // Change it to lowercase and update the value
            letter = letter[0].toLowerCase();
            this.value = letter + this.value.substring(1);

            // Do the request
        }
    }
}

My vanilla-JS skills are a bit rusty but this should do the trick. Just for the heck of it, here's the same using jQuery:

$(function() {
    $('#myField').keyup(function() {
        var letter = $(this).val().match(/^([A-Za-z])/);

        // If a letter was found
        if(letter !== null) {
            // Change it to lowercase and update the value
            letter = letter[0].toLowerCase();
            $(this).val(letter + $(this).val().substring(1);

            // Do the request
        }
    });
});
长梦不多时 2024-08-28 19:39:03

问题的哪一部分你不知道该怎么办?这是您可以遵循的方法。 这是一个很好的起点。

很可能需要调整,但如果我们的文本字段的 id 是“txt”,那么

document.getElementByID('txt').onkeypress = function(e) {
  var textInField = this.value;
  if (textInField.length == 1) {
    var firstChar = textInField.charAt(0);
    if (/[a-zA-Z]/.test(firstChar)) {
      sendXHR(textInField.value.toLowerCase())
    }
  } else {
    // What do you do if there is one or more chars???
  }
}

请注意,这里的其他答案提到了 onchange,直到焦点离开该字段才会触发,我认为这不是您想要的想

What part of the problem do you not know how to do? Here's an approach that you can follow. Very likely to need adjustments, but a good starting point

if our text field's id is 'txt'

document.getElementByID('txt').onkeypress = function(e) {
  var textInField = this.value;
  if (textInField.length == 1) {
    var firstChar = textInField.charAt(0);
    if (/[a-zA-Z]/.test(firstChar)) {
      sendXHR(textInField.value.toLowerCase())
    }
  } else {
    // What do you do if there is one or more chars???
  }
}

Note that the other answers here mention onchange, that doesn't fire until the focus leaves the field, which I don't think is what you want

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文