【问题标题】:Change dropdown value based on Text Input根据文本输入更改下拉值
【发布时间】:2013-02-24 14:37:03
【问题描述】:

我想根据文本输入值更改选择选项。

例如,当输入 mydomain.com 时,应该会发生这种情况:

  • 我输入“mydomain”
  • 我输入“。” (点)
  • 它停止向文本输入添加值
  • 它使用“.com”搜索选择选项并选择它

我已经编辑了我的这个老问题以使其更清楚。这是我当时的截图,它可能有助于说明问题:

代码示例:

<input type="text" autocomplete="off" id="domain" name="domain">

<select id="extension" name="extension">
    <option value=".com">.com</option>
    <option value=".com.br">.com.br</option>
    <option value=".net">.net</option>
    <option value=".org">.org</option>
    <option value=".info">.info</option>
    <option value=".biz">.biz</option>
    <option value=".tv">.tv</option>
    <option value=".name">.name</option>
    <option value=".ws">.ws</option>
    <option value=".cc">.cc</option>
    <option value=".blog.br">.blog.br</option>
    <option value=".flog.br">.flog.br</option>
    <option value=".vlog.br">.vlog.br</option>
    <option value=".wiki.br">.wiki.br</option>
    <option value=".adm.br">.adm.br</option>
    <option value=".adv.br">.adv.br</option>
    <option value=".agr.br">.agr.br</option>
    <option value=".am.br">.am.br</option>
    <option value=".arq.br">.arq.br</option>
    <option value=".art.br">.art.br</option>
    <option value=".ato.br">.ato.br</option>
    <option value=".bio.br">.bio.br</option>
    <option value=".bmd.br">.bmd.br</option>
    <option value=".cim.br">.cim.br</option>
    <option value=".cng.br">.cng.br</option>
    <option value=".cnt.br">.cnt.br</option>
    <option value=".coop.br">.coop.br</option>
    <option value=".ecn.br">.ecn.br</option>
    <option value=".edu.br">.edu.br</option>
    <option value=".eng.br">.eng.br</option>
    <option value=".esp.br">.esp.br</option>
    <option value=".etc.br">.etc.br</option>
    <option value=".eti.br">.eti.br</option>
    <option value=".far.br">.far.br</option>
    <option value=".fm.br">.fm.br</option>
    <option value=".fnd.br">.fnd.br</option>
    <option value=".fot.br">.fot.br</option>
    <option value=".fst.br">.fst.br</option>
    <option value=".g12.br">.g12.br</option>
    <option value=".ggf.br">.ggf.br</option>
    <option value=".gov.br">.gov.br</option>
    <option value=".imb.br">.imb.br</option>
    <option value=".ind.br">.ind.br</option>
    <option value=".inf.br">.inf.br</option>
    <option value=".jor.br">.jor.br</option>
    <option value=".lel.br">.lel.br</option>
    <option value=".mat.br">.mat.br</option>
    <option value=".med.br">.med.br</option>
    <option value=".mil.br">.mil.br</option>
    <option value=".mus.br">.mus.br</option>
    <option value=".net.br">.net.br</option>
    <option value=".nom.br">.nom.br</option>
    <option value=".not.br">.not.br</option>
    <option value=".ntr.br">.ntr.br</option>
    <option value=".odo.br">.odo.br</option>
    <option value=".org.br">.org.br</option>
    <option value=".ppg.br">.ppg.br</option>
    <option value=".pro.br">.pro.br</option>
    <option value=".psc.br">.psc.br</option>
    <option value=".psi.br">.psi.br</option>
    <option value=".qsl.br">.qsl.br</option>
    <option value=".rec.br">.rec.br</option>
    <option value=".slg.br">.slg.br</option>
    <option value=".srv.br">.srv.br</option>
    <option value=".tmp.br">.tmp.br</option>
    <option value=".trd.br">.trd.br</option>
    <option value=".tur.br">.tur.br</option>
    <option value=".tv.br">.tv.br</option>
    <option value=".vet.br">.vet.br</option>
    <option value=".zlg.br">.zlg.br</option>
</select>

【问题讨论】:

  • 这是一个问题吗?如果是这样,请删除所有不必要的代码并发布 SSCCE 以及您尝试过的内容以及卡在哪里,而不是整个页面和两个冗余图像
  • 我没有看到问题,只是为了更好地说明问题并清楚地了解问题
  • 好吧,我已经详细说明了一个问题并在这里发布>。>另外,我已经搜索了很多解决方案,但找不到
  • 我已经删除了不必要的代码

标签: jquery forms drop-down-menu input


【解决方案1】:

您可以使用 jQuery 在用户键入时执行此操作...

$(document).ready(function() {
    $('#search').keyup(function() {
        //The user has typed something. See what they typed and split it.
        var value = $(this).val();
        var components = value.split(".");
        if(components.length == 2) {
            //They have typed a TLD like .com
            if($("#extensao option[value='."+ components[1] + "']").length > 0) {
                //They have typed an available TLD. Select the dropdown and update the box.
                $("#search").val(components[0]);
                $("#extensao").val("." + components[1]);
            }
        } else if (components.length > 2) {
            //They have typed a Second level domain like .blog.br
            if($("#extensao option[value='."+ components[components.length - 2] + "." + components[components.length - 1] + "']").length > 0) {
                //They have typed an available second level domain.
                $("#search").val(components[0]);
                $("#extensao").val("." + components[components.length - 2] + "." + components[components.length - 1]);
            }
        }
    });
});

不确定这是否是您正在寻找的解决方案(或服务器端的解决方案)。无论哪种方式,您都需要额外的服务器端验证。

【讨论】:

  • 这太棒了!正是我要找的东西!!!这几乎是完美的 - 它与 .com/.org/.net/.info/.biz 完美配合 - 但不适用于 .blog.br/.adv.br/.coop.br/.flog.br
  • @user2056484 我现在检查我的代码,可能有错误。
  • @user2056484 我弄错了components.length - 2和components.length - 1,它现在可以正常工作了!对不起!
  • 你一定不要后悔,这是完美的!我简直不能感谢你!谢谢你一千次,祝你有幸福的一天!!!!!!
【解决方案2】:

我有两个想法怎么做

【讨论】:

  • 我想过使用正则表达式,但是看起来不太好......我对解析字符串不熟悉。知道如何获得完美的解决方案吗?
  • 我建议你熟悉正则表达式。它在许多方面都很好,例如验证输入表单。现在也是你的问题。请写一些好的正则表达式验证器,只接受字母,它消除了域的所有潜在问题。顺便说一下,第二种解决方案是我认为解决这种情况的最佳方法。
  • 我知道我可以使用$(document).ready(function(){ $('#domain').valid8({ regularExpressions: [ { expression: /^.+$/, errormessage: 'Please enter a domain.'}, { expression: /^[a-zA-Z0-9, \xBF-\xFF\.-]+$/, errormessage: 'Ops! Use only letters and numbers in your domain name'} ] }); 之类的东西,但这不是一个好看的解决方案:/
  • 我正在寻找解决访问者问题的代码,而不是向他提示错误消息,只是通过忽略域文本输入中的扩展名,这不是太难,我不知道为什么你们这么费心来帮助和否定我>.>
  • 想象一下像“lijšě534.řž687#řž!”这样的输入。你现在会如何表现? php.net/manual/en/function.ctype-alpha.php -- 如果文本中的每个字符都是来自当前语言环境的字母,则返回 TRUE,否则返回 FALSE。
猜你喜欢
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 2019-04-30
  • 2014-10-02
  • 2022-01-12
相关资源
最近更新 更多