【问题标题】:Form input with cursor directly after placeholder. Bootstrap 4直接在占位符后使用光标进行表单输入。引导程序 4
【发布时间】:2020-11-20 18:59:24
【问题描述】:

在占位符文本之后直接使用光标(开始输入的位置)在输入表单中构建带有占位符文本的输入表单的正确方法是什么?

占位符文本是只读的。

这是我的代码:

<form action="functions/paypal_link.php" method="POST">
  <div class="form-group">
    <div class="input-group input-group-lg">
      <div class="input-group-prepend">
        <span class="input-group-text rounded-0 text-right"><img src="/images/pp.png" width="25px"> https://paypal.me/</span>
      </div>
      <input type="text" id="paypal" name="paypal" class="form-control form-control-lg" value="" required>
    </div>
  <div class="form-row">
    <div class="col">
      <center><input type="submit" value="Submit Paypal Username" class="btn btn-primary"></center>
    </div>
  </div>
</form>

我有什么:

Image - Current

这是我想要的示例:

Image - Goal

【问题讨论】:

  • (这不是一个真正的占位符然后开始。)

标签: php html css forms twitter-bootstrap


【解决方案1】:

设置您的输入值以显示您的目标文本paypal.me/。默认情况下,这会将输入值设置为paypal.me/。然后使用一些 javascript 将光标放在输入字段中字符串的末尾。这可以使用.setSelectionRange() 来设置输入字段的开始和结束位置。因此,您可以创建一个函数,然后将输入的值和长度传递给该函数。使用focus() 将焦点设置在指定元素上。您可以在旧版浏览器的元素上同时使用 createTextRange()moveEnd()moveStart()select()

已编辑: (2020 年 8 月 1 日)


在您的输入字段的input 的事件侦听器中添加了一个条件,以检查您的输入字段在某个子字符串范围内的值是否使用运算符-> ! 设置为目标字符串paypal.me/。这可以防止用户将值添加到第一部分或输入字段的设置子字符串范围之间的任何位置,并检查以确保在您定义的输入字段值的子字符串之间的字符槽确实设置为所需的价值观。

if (!paypal.value.substring(0,10).includes('paypal.me/')) 基本上表示如果您的 ID paypal 输入字段的值不包含在值输入的定义子字符串 paypal.me/ 内,那么在条件内, { paypal.value = 'paypal.me/'; } --> 将输入字段的值设置为等于字符串paypal.me/

这只会在用户尝试从输入字段中删除 value 属性中设置的初始值时触发 => paypal.me/ 或者如果他们尝试在字符串索引 start 和结束范围。

见下面的代码...

let paypal = document.getElementById('paypal');
let placement = paypal.length;

function setCaretPosition(el, pos) {
  // Modern browsers
  if (el.setSelectionRange) {
    el.focus();
    el.setSelectionRange(pos, pos);

    // IE8 and below
  } else if (el.createTextRange) {
    let range = el.createTextRange();
    range.collapse(true);
    range.moveEnd('character', pos);
    range.moveStart('character', pos);
    range.select();
  }
}

/////////////////////////////////////////////////////////////////////////////
//                              EDIT:                                      //
// add event listener to detect if your values string does not include the //
// target string within a defined set of start and end indices within your //
// string, if not we force the value to equal the string `paypal.me/`      //
/////////////////////////////////////////////////////////////////////////////
paypal.addEventListener('input', function() {
  if (!paypal.value.substring(0,10).includes('paypal.me/')) {  
    paypal.value = 'paypal.me/';
  }
});

setCaretPosition(paypal, paypal.value.length);
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<form action="functions/paypal_link.php" method="POST">
  <div class="form-group">
    <div class="input-group input-group-lg">
      <div class="input-group-prepend">
        <span class="input-group-text rounded-0 text-right"><img src="/images/pp.png" width="25px"> https://paypal.me/</span>
      </div>
      <input type="text" id="paypal" name="paypal" class="form-control form-control-lg" value="paypal.me/" required>


    </div>
    <div class="form-row">
      <div class="col">
        <center><input type="submit" value="Submit Paypal Username" class="btn btn-primary"></center>
      </div>
    </div>
</form>

【讨论】:

  • 太棒了,谢谢。是否可以将输入字段中的占位符文本设为只读或不可删除?
  • @DaveWilkins,没问题...只需设置一个条件并检查包含paypal.me/ 的字符串部分的子字符串使用substring(0, 10).includes('paypal.me/') 设置条件以检查它是否不包含通过对does not 使用! 运算符。这会将前 11 个字符的值设置为您想要的字符串,并强制用户输入使用超出您想要的字符串的输入...将其包装在一个检查输入的事件侦听器中,input -> paypal.addEventListener('input', function(){ // conditional here });查看我更新的代码片段!
  • 如果这回答了您的问题,请检查答案是否已接受;)祝您编码愉快!
【解决方案2】:

你不能只使用自动对焦并拆分用户名部分吗?

input[type=text], select {
  border: 0;
}
paypal.me/&lt;input type="text" name="username" id="username" autofocus&gt;

这样每次输入的只是用户名,而不是 URL + 用户名。如果您需要完整的 URL,您可以在保存响应时将用户名附加到相同的末尾,但是您可以这样做。我提供了一个非常简单的演示,说明它的外观。

EDIT

我做了一个稍微详细一点的,以便更好地展示它是如何工作的。

input[type=text],
select {
  border: 0;
  outline: none;
  font-family: 'Roboto', serif;
  font-size: 14px;
}

.wrap {
  width: 50%;
  border: 1px black solid;
  border-radius: 15px;
  padding: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-flow: row;
  margin-left: auto;
  margin-right: auto;
}

p {
  font-family: 'Roboto', serif;
  font-size: 14px;
}
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700;900&display=swap" rel="stylesheet">
<div class="wrap">
  <p>paypal.me/<input type="text" name="username" id="username" autofocus></p>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2018-03-07
    相关资源
    最近更新 更多