如何在 HTML 页面上实时动态显示多个行框中 header 框中的文本?
How to dynamically show text that's in a header box on multiple line boxes in real time on an HTML page?
我有一个 HTML header 这样的盒子
<textarea name="order[header_comments]"></textarea>
然后我有像这样的行注释框:
<textarea name="line_comments[0][line_comments]"></textarea>
<textarea name="line_comments[1][line_comments]"></textarea>
...
<textarea name="line_comments[n][line_comments]"></textarea>
行框中可能已经有一些文本。
我想做的是这样的:
当我在 header 框中键入任何内容时,我希望它立即 pre-pended 到所有行注释框。这就是所有的行注释框都需要始终有这个,即使行框被编辑,在 header 框被填充之前或之后:
{real-time header text}{EOL}{any text that was there already}
我假设如果我在行框中编辑任何文本,它一定不能触及 header 文本(否则事情会变得一团糟)。
我该怎么做?
我可以根据需要将 id
for class
添加到 textarea 标签。我不确定使用哪种技术或如何开始。
我的启动代码:
<textarea name="order[header_comments]" placeholder="header box"></textarea>
<textarea name="line_comments[0][line_comments]"></textarea>
<textarea name="line_comments[1][line_comments]">some existing text</textarea>
如果这是您想要的,请参阅下文
$(document).ready(function() {
$("textarea[name='order[header_comments]']").on('keyup', function(e) {
var keynum;
if (window.event) { // IE
keynum = e.keyCode;
} else if (e.which) { // Netscape/Firefox/Opera
keynum = e.which;
}
//console.log(String.fromCharCode(keynum));
let headerVal = String.fromCharCode(keynum);
$("textarea[name*='line_comments']").each(function() {
$(this).val($(this).val() + headerVal);
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea name="order[header_comments]" placeholder="header box"></textarea>
<textarea name="line_comments[0][line_comments]"></textarea>
<textarea name="line_comments[1][line_comments]">some existing text</textarea>
$('input[order[header_comments]]').change(function(){
var headText = $(this).val() ;
$("textarea[name*='line_comments']").each(function() {
$(this).val(headText + ' ' + $(this).val());
});
});
你可以这样使用:
var prevPrincipalVal = "";
$("#principal").keyup(function(){
var principalVal = $(this).val();
$(".other").each(function(){
$(this).val($(this).val().replace(new RegExp("^" + prevPrincipalVal + "\n*"), principalVal + "\n"));
})
prevPrincipalVal = principalVal;
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="principal"></textarea>
<textarea class="other">Custom 1</textarea>
<textarea class="other">Custom 2</textarea>
<textarea class="other">Custom 3</textarea>
基本思想是保存主体 <textarea>
的先前值,并在其他每个 <textarea>
中用新值替换先前值。这些需要完善,你必须从主体 <textarea>
.
的文本中转义所有特殊的正则表达式字符
我认为这与您的描述很接近(假设行注释应该是不可修改的)。
var previousLength = 0;
$("#headerBox").on('keyup', function() {
var headerVal = $("#headerBox").val();
$('.commentBox').each(function(){
this.value = headerVal + this.value.substring(previousLength, this.value.length);
});
previousLength = headerVal.length;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="headerBox" name="order[header_comments]" placeholder="header box"></textarea>
<textarea readonly class="commentBox" name="line_comments[0][line_comments]"></textarea>
<textarea readonly class="commentBox" name="line_comments[1][line_comments]">some existing text</textarea>
编辑:这演示了 "protecting" 行注释中前置的 header 内容。尝试修改行注释的 header 部分将立即恢复。它并不完美,我敢肯定有些情况没有被考虑在内,但希望这是一个有用的起点。
var previousLength = 0;
$("#headerBox").on('keyup', function() {
var headerVal = $("#headerBox").val();
$('.commentBox').each(function(){
this.value = headerVal + this.value.substring(previousLength, this.value.length);
});
previousLength = headerVal.length;
});
var beforeChange = "";
$('.commentBox').on('keydown', function() {
beforeChange = this.value;
});
$('.commentBox').on('keyup', function() {
var headerVal = $("#headerBox").val();
if (!this.value.startsWith(headerVal)){
this.value = beforeChange;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="headerBox" name="order[header_comments]" placeholder="header box"></textarea>
<textarea class="commentBox" name="line_comments[0][line_comments]"></textarea>
<textarea class="commentBox" name="line_comments[1][line_comments]">some existing text</textarea>
我有一个 HTML header 这样的盒子
<textarea name="order[header_comments]"></textarea>
然后我有像这样的行注释框:
<textarea name="line_comments[0][line_comments]"></textarea>
<textarea name="line_comments[1][line_comments]"></textarea>
...
<textarea name="line_comments[n][line_comments]"></textarea>
行框中可能已经有一些文本。
我想做的是这样的:
当我在 header 框中键入任何内容时,我希望它立即 pre-pended 到所有行注释框。这就是所有的行注释框都需要始终有这个,即使行框被编辑,在 header 框被填充之前或之后:
{real-time header text}{EOL}{any text that was there already}
我假设如果我在行框中编辑任何文本,它一定不能触及 header 文本(否则事情会变得一团糟)。
我该怎么做?
我可以根据需要将 id
for class
添加到 textarea 标签。我不确定使用哪种技术或如何开始。
我的启动代码:
<textarea name="order[header_comments]" placeholder="header box"></textarea>
<textarea name="line_comments[0][line_comments]"></textarea>
<textarea name="line_comments[1][line_comments]">some existing text</textarea>
如果这是您想要的,请参阅下文
$(document).ready(function() {
$("textarea[name='order[header_comments]']").on('keyup', function(e) {
var keynum;
if (window.event) { // IE
keynum = e.keyCode;
} else if (e.which) { // Netscape/Firefox/Opera
keynum = e.which;
}
//console.log(String.fromCharCode(keynum));
let headerVal = String.fromCharCode(keynum);
$("textarea[name*='line_comments']").each(function() {
$(this).val($(this).val() + headerVal);
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea name="order[header_comments]" placeholder="header box"></textarea>
<textarea name="line_comments[0][line_comments]"></textarea>
<textarea name="line_comments[1][line_comments]">some existing text</textarea>
$('input[order[header_comments]]').change(function(){
var headText = $(this).val() ;
$("textarea[name*='line_comments']").each(function() {
$(this).val(headText + ' ' + $(this).val());
});
});
你可以这样使用:
var prevPrincipalVal = "";
$("#principal").keyup(function(){
var principalVal = $(this).val();
$(".other").each(function(){
$(this).val($(this).val().replace(new RegExp("^" + prevPrincipalVal + "\n*"), principalVal + "\n"));
})
prevPrincipalVal = principalVal;
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="principal"></textarea>
<textarea class="other">Custom 1</textarea>
<textarea class="other">Custom 2</textarea>
<textarea class="other">Custom 3</textarea>
基本思想是保存主体 <textarea>
的先前值,并在其他每个 <textarea>
中用新值替换先前值。这些需要完善,你必须从主体 <textarea>
.
我认为这与您的描述很接近(假设行注释应该是不可修改的)。
var previousLength = 0;
$("#headerBox").on('keyup', function() {
var headerVal = $("#headerBox").val();
$('.commentBox').each(function(){
this.value = headerVal + this.value.substring(previousLength, this.value.length);
});
previousLength = headerVal.length;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="headerBox" name="order[header_comments]" placeholder="header box"></textarea>
<textarea readonly class="commentBox" name="line_comments[0][line_comments]"></textarea>
<textarea readonly class="commentBox" name="line_comments[1][line_comments]">some existing text</textarea>
编辑:这演示了 "protecting" 行注释中前置的 header 内容。尝试修改行注释的 header 部分将立即恢复。它并不完美,我敢肯定有些情况没有被考虑在内,但希望这是一个有用的起点。
var previousLength = 0;
$("#headerBox").on('keyup', function() {
var headerVal = $("#headerBox").val();
$('.commentBox').each(function(){
this.value = headerVal + this.value.substring(previousLength, this.value.length);
});
previousLength = headerVal.length;
});
var beforeChange = "";
$('.commentBox').on('keydown', function() {
beforeChange = this.value;
});
$('.commentBox').on('keyup', function() {
var headerVal = $("#headerBox").val();
if (!this.value.startsWith(headerVal)){
this.value = beforeChange;
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea id="headerBox" name="order[header_comments]" placeholder="header box"></textarea>
<textarea class="commentBox" name="line_comments[0][line_comments]"></textarea>
<textarea class="commentBox" name="line_comments[1][line_comments]">some existing text</textarea>