jquery input.focus +换行无法输入内容

发布于 2024-10-01 15:09:47 字数 722 浏览 3 评论 0原文

$('input').focus(function() {
      $(this).next("div.description").slideToggle("slow");
      $(this).wrap(' <
          div > < /div>').select('input'); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<blink>
  <input type="text" class="form-text required" value="" size="35" id="editfiled" name="somename" maxlength="128">
  <div class="description">
    <p>some text</p>
</blink>

之后我无法输入此输入。

我需要如果输入获得焦点,它必须在 div 内突出显示。

$('input').focus(function() {
      $(this).next("div.description").slideToggle("slow");
      $(this).wrap(' <
          div > < /div>').select('input'); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<blink>
  <input type="text" class="form-text required" value="" size="35" id="editfiled" name="somename" maxlength="128">
  <div class="description">
    <p>some text</p>
</blink>

and after that I can't type in this input.

I need that if input gets focus it must be highlighted inside div.

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

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

发布评论

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

评论(2

你的他你的她 2024-10-08 15:09:47

你陷入了一个圈子。

如果输入获得焦点,则将其包装到 div 中。
由于这是标记的重建,因此输入将失去焦点。如果再次单击它,焦点将再次被触发,另一个 div 将包裹在输入周围,依此类推。

您可以这样尝试:

$('input').focus(function () {      
  if(!$(this).data('wrapper'))
  {
      $(this).next("div.description").slideToggle("slow");

      $(this).data('wrapper',$(this).wrap('<div/>').parent());
      var _this=this;
      setTimeout(function(){_this.focus();},10);
  }
  else
  {
    this.select();
  }
});

它将wrapper-div存储为输入的data(),因此如果输入已经被包装,该函数将不会执行任何操作。

如果您在某处删除了包裹在输入周围的 div,也不要忘记从 data() 中删除包装器。

(在 Firefox 中,当 SlideToggle 完成时,选择会丢失,也许您需要另一个解决方案来显示/隐藏描述)

You run into a circle.

If the input gets the focus, you wrap it into the div.
As this is a rebuilding of the markup, the input will lose the focus. If you click on it again, focus will be triggered again, another div will be wrapped around the input and so on.

You could try it like that:

$('input').focus(function () {      
  if(!$(this).data('wrapper'))
  {
      $(this).next("div.description").slideToggle("slow");

      $(this).data('wrapper',$(this).wrap('<div/>').parent());
      var _this=this;
      setTimeout(function(){_this.focus();},10);
  }
  else
  {
    this.select();
  }
});

It stores the wrapper-div as data() of the input, so if the input is already wrapped, the function would'nt do anything.

Don't forget to remove the wrapper from data() too if you somewhere remove the div wrapped around the input.

(In Firefox the selection is lost when slideToggle is finished, maybe you need another solution to show/hide the description)

牛↙奶布丁 2024-10-08 15:09:47

它应该看起来像这样( .select() 调用没有参数):

$('input').focus(function () {  
   $(this).next("div.description").slideToggle("slow");
   $(this).wrap('<div></div>').select();
});

您可以在这里测试

It should look like this (no parameters to the .select() call):

$('input').focus(function () {  
   $(this).next("div.description").slideToggle("slow");
   $(this).wrap('<div></div>').select();
});

You can test it here.

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