【问题标题】:jQuery: replace body text occurance with input value on clickjQuery:点击时用输入值替换正文文本
【发布时间】:2019-08-01 22:04:32
【问题描述】:

我想通过单击按钮将文本区域中两个特定字符之间的数据替换为输入字段的数据。到目前为止,我有这个:

$("#apply_capping").click(function() {
    $("body").children().each(function() {
        $(this).html($(this).html().replace(/(?<=\*).*?(?=\))/g,$("#cap").val()));
    });
}); 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="popunder-capping" class="panel-collapse collapse" style="background-color:#fff;color:#000">
      <ul class="list-group">
        <li class="list-group-item">
    <label class="cappings">Hour(s):</label> <input type="number" min="1" max="168" class="select-selected" id="cap" name="cap" size="1" maxlength="3"> 
        </li>
      </ul>
    <button id="apply_capping" type="submit" class="btn btn-primary">
    Apply
    </button>
</div>

<div class="portlet-body">
    <ul class="list-group">
        <li class="list-group-item">
            <label style="width:100%;">
                <i class="fas fa-code fa-fw"></i> Source Code
            </label>
            <br/>
<textarea id="parammed_popunder" rows="3" width="200" class="form-control">
wait:(3600*24)           </textarea>
        </li>
    </ul>
</div>

在我这端,它实际上是从带有 id cap 的元素中复制值并将其替换到文本区域中。问题是除非刷新页面,否则不能使用两次,并且该值从输入中消失。我应该如何处理?

【问题讨论】:

  • 问题是你正在替换html,所以点击事件绑定的dom元素在点击事件后不存在了。
  • 谢谢!在这种情况下如何仅引用 id 为 parammed_popunder 的 textarea?

标签: javascript jquery html function replace


【解决方案1】:

你应该改变:

$("#apply_capping").click(function() {
    $("body").children().each(function() {
        $(this).html($(this).html().replace(/(?<=\*).*?(?=\))/g,$("#cap").val()));
    });
});

到:

$("#apply_capping").click(function() {
    $("body").find("textarea#parammed_popunder").val(function() {
        return $(this).val().replace(/(?<=\*).*?(?=\))/g,$("#cap").val());
    });
});

问题是您当前的代码更改了您网站上的html,因此绑定到点击事件的 dom 元素不再存在。

$("#apply_capping").click(function() {
    $("body").find("textarea#parammed_popunder").val(function() {
        return $(this).val().replace(/(?<=\*).*?(?=\))/g,$("#cap").val());
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="popunder-capping" class="panel-collapse collapse" style="background-color:#fff;color:#000">
      <ul class="list-group">
        <li class="list-group-item">
    <label class="cappings">Hour(s):</label> <input type="number" min="1" max="168" class="select-selected" id="cap" name="cap" size="1" maxlength="3"> 
        </li>
      </ul>
    <button id="apply_capping" type="submit" class="btn btn-primary">
    Apply
    </button>
</div>

<div class="portlet-body">
    <ul class="list-group">
        <li class="list-group-item">
            <label style="width:100%;">
                <i class="fas fa-code fa-fw"></i> Source Code
            </label>
            <br/>
<textarea id="parammed_popunder" rows="3" width="200" class="form-control">
wait:(3600*24)           </textarea>
        </li>
    </ul>
</div>

【讨论】:

  • 有效!非常感谢!看起来你的回答比我接受的更快。还要再等 6 分钟。
  • 没问题@lion 很乐意提供帮助,如果这解决了您的问题,请考虑将其标记为已解决,以便其他用户知道它解决了您的问题
猜你喜欢
  • 2013-10-17
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2016-04-26
  • 1970-01-01
相关资源
最近更新 更多