【问题标题】:How to limit two inputs with custom maxlength?如何使用自定义 maxlength 限制两个输入?
【发布时间】:2019-01-16 11:05:03
【问题描述】:

如何使用自定义 maxlength 限制两个输入?

我正在设置自定义限制 $limit = "500"; 并尝试在两个输入中限制用户单词。我想限制第一个输入的最大长度并计算第一个输入中的字数,而不是用我的自定义限制中剩下的字数限制第二个输入的最大长度。

我想将长度设置在一起,最大长度为 500,一个可以有最大 100,一个可以有最大 400。 如果第一个输入的单词少于 100,则将剩余的单词添加到第二个输入的最大长度。 like : 第一个输入有 95 个单词,还有 5 个单词达到限制。

然后将第二个输入 maxlentgh 更改为 405,

我创建这样的输入:

function maxLength(el) {
  if (!('maxLength' in el)) {
    var max = el.attributes.maxLength.value;
    el.onkeypress = function() {
      if (this.value.length >= max) return false;
    };
  }
}

maxLength(document.getElementById("title"));

function validateLength(el, word_left_field, len) {
  document.all[word_left_field].value = len - el.value.length;
  if (document.all[word_left_field].value < 1) {
    alert("You can add max " + len + " words .");
    el.value = el.value.substr(0, len);
    document.all[word_left_field].value = 0;
    return false;
  }
  return true;
}
<input type="text" id="title" name="title" maxlength="100" onChange="return validateLength(this, 'word_left', 100);" onKeyUp="return validateLength(this, 'word_left', 100);">
<input type="text" name="word_left" value="100" style="width: 25;" readonly="true" size="3">
<input type="text" id="subject" name="subject" maxlength="400" onChange="return validateLength(this, 'word_left', 400);" onKeyUp="return validateLength(this, 'word_left', 400);">
<input type="text" name="word_left" value="400" style="width: 25;" readonly="true" size="3">

所以两个输入的总和是 500。

我尝试设置 html 5 属性 pattern=".{59,60}" 但它们与设置属性 min 和 length 相同。

但我的 javascript 限制了第一次输入。 我尝试了几种方法,但没有机会使其发挥作用,这将是一个很长的问题,我没有在这里全部提出。

【问题讨论】:

  • 不确定我是否理解你。您不想限制 2 个输入元素的最大长度为 500 吗?所以他们每个人可以有 250 个,或者一个 100 和一个 400,等等?
  • 我想照你说的做,我想设置长度一起最大长度500,一个可以有100,一个可以有400。谢谢

标签: javascript php html


【解决方案1】:

我相信你需要这样的东西:

var _maxLength = 500;
var _lengthInput = 0;

var input1 = document.getElementById("input1");
var input2 = document.getElementById("input2");
var p = document.getElementById("total");

p.innerHTML = _maxLength;

input1.addEventListener("focus", function(e) {
  this.maxLength = _maxLength + this.value.length;
  _lengthInput = this.value.length;
});

input1.addEventListener("blur", function(e) {

  if (_lengthInput == this.value.length)
    return;
  if (_lengthInput > this.value.length) {
    _maxLength += _lengthInput - this.value.length;
  } else {
    _maxLength -= this.value.length - _lengthInput;
  }

  total.innerHTML = _maxLength;
});

input2.addEventListener("focus", function(e) {
  this.maxLength = _maxLength + this.value.length;
  _lengthInput = this.value.length;
});

input2.addEventListener("blur", function(e) {
  if (_lengthInput == this.value.length)
    return;
  if (_lengthInput > this.value.length) {
    _maxLength += _lengthInput - this.value.length;
  } else {
    _maxLength -= this.value.length - _lengthInput;
  }

  total.innerHTML = _maxLength;
});
Input 1 <input type="text" id="input1">
<br /> Input 2 <input type="text" id="input2">
<br />
<p>Characters remaining: <span id="total"></span> </p>

【讨论】:

  • 是否可以添加 max lentgh 以使用 javascript 控制输入的 maxlentgh ?好吧,忘记这段代码吧。lol
  • 是的,有可能!您可以访问输入的 maxLength 属性。例如:document.getElementById("idElement").maxLength = 40
  • 当我将 maxlentgh 属性更改为 var input1 = document.getElementById("input1").maxLength = 60; 时,它会停止显示剩下的单词,但看起来计数在 @MarcusVinnicius 后面工作
【解决方案2】:

希望下面的代码对你有帮助,

$(document).ready(function () {

	$("#subject").on("keypress", function () {
  	var titleLength = $("#title").val().length;
    var titleMaxLength = $("#title").attr("maxLength");
    var titleWordLeft = titleMaxLength - titleLength
    var subjectLength = $("#subject").data("charlength"); 
    var subjectMaxLength = titleWordLeft + subjectLength;
    $("#subject").attr("maxLength",subjectMaxLength);
    
  });

})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="title" name="title" maxlength="100">

<input type="text" name="word_left" value="100" style="width: 25;" readonly="true" size="3">

<input type="text" id="subject" name="subject" data-charlength="400">


<input type="text" name="word_left" value="400" style="width: 25;" readonly="true" size="3">

【讨论】:

  • 我尝试了代码,但看起来它什么也没做 :( 我必须将它与我的 javascript 代码一起使用吗?
  • @kuran 您可以删除您的代码,然后尝试发布 JQuery 和 html 更新代码。当您运行发布的 sn-p 时,您将了解输出
  • OP 似乎没有使用 jQuery。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 2010-11-09
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
相关资源
最近更新 更多