Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否使用RegEx和.replace用用户输入替换文本?_Javascript_Jquery_Regex_Replace_Jsfiddle - Fatal编程技术网

Javascript 是否使用RegEx和.replace用用户输入替换文本?

Javascript 是否使用RegEx和.replace用用户输入替换文本?,javascript,jquery,regex,replace,jsfiddle,Javascript,Jquery,Regex,Replace,Jsfiddle,我是jQuery新手,偶然发现了RegEx的概念,使用.replace进行漂亮的文本替换 在我的表单中,有一些复选框可以触发文本出现在文本区域中。还有一些用户输入区域作为字段 如何使用这个jQuery用用户输入替换某些复选框中的部分文本,而不是其他复选框中的部分文本?我认为使用if/else参数触发正则表达式并替换是关键,但我不知道如何合并其余的 这是我表格的一个模型: 静态选项: 选项1 选项2 可由用户文本修改的选项: 选项3 选项4 编辑这是我的新脚本,基于以下建议:

我是jQuery新手,偶然发现了RegEx的概念,使用.replace进行漂亮的文本替换

在我的表单中,有一些复选框可以触发文本出现在文本区域中。还有一些用户输入区域作为字段

如何使用这个jQuery用用户输入替换某些复选框中的部分文本,而不是其他复选框中的部分文本?我认为使用if/else参数触发正则表达式并替换是关键,但我不知道如何合并其余的

这是我表格的一个模型:


静态选项:
选项1
选项2
可由用户文本修改的选项:
选项3
选项4





编辑这是我的新脚本,基于以下建议:

    $(document).ready(function(){
var comLines = {
comLine100: 'Text for option1 \n',
comLine101: 'Text for option2 \n',
comLine102: 'Text for option3 \n',
comLine103: 'Text for option4 \n'
};

var mytextbox = document.getElementById('outPut2');
var chosenComm = null;

var Inputs = document.getElementsByName("comLines");
for (var i = 0; i < Inputs.length; i++) {
    Inputs[i].onchange = function() {
        chosenComm = this;
        printComment();        
    };
    }

function printComment(){
    if(chosenComm !== null){
        var chxbox=chosenComm.id;
        var uinput = document.getElementById('usrinput1');
            if(uinput.value!=="" && (chxbox=="comLine102" || chxbox=="comLine103")){
                mytextbox.value += comLines[chosenComm.id].replace(/Text/, $('#usrinput1').val()) + "\n";
                // resets the radio box values after output is displayed
                chosenComm.checked = false;
                // resets these variables to the null state
                chosenComm = null;
            }
            else {
                mytextbox.value += comLines[chosenComm.id] + "\n";
                // resets the radio box values after output is displayed
                chosenComm.checked = false;
                // resets these variables to the null state
                chosenComm = null;
            }
    }
}

});
$(文档).ready(函数(){
var通信线路={
comLine100:'选项1的文本\n',
comLine101:“选项2的文本\n”,
comLine102:'选项3的文本\n',
comLine103:“选项4的文本\n”
};
var mytextbox=document.getElementById('outPut2');
var chosenComm=null;
var输入=document.getElementsByName(“comLines”);
对于(变量i=0;i
请参阅我的JSFIDLE:


现在我想怎么做就怎么做。感谢Eric S的解释和指导

简单的答案是替换:

mytextbox.value += comLines[chosenComm.id] + "\n";

replace
调用在斜杠中查找正则表达式,并用逗号后的值替换匹配项

$('#usrinput1').val()
使用jQuery查找ID为
usrinput1
的dom元素,然后获取它的值(因为它是一个输入,所以它获取用户输入的任何内容)


更完整的答案是,您可能应该更多地接受jQuery:

  • 窗口.onload
    调用替换为
    $(document).ready(function(){…})
    调用
  • 考虑将
    文档.getElementById
    替换为
    $(“#outPut2”)
  • 考虑将
    文档.getElementsByName
    替换为
    $(输入[name=commLines])
    或向所有这些项目添加一类
    comm lines
    ,并使用
    $(.comm lines)
  • 考虑使用jQuery的
    on
    函数绑定内联按钮处理程序(使用传入函数绑定
    on
    调用)和输入[i].onchange调用的事件处理程序
抱歉,如果这听起来过于主观判断,只是试图建议一个更标准、更不容易出错的解决方案

仍然需要一些调整,但大致如下:

$('.comm-lines').on('change', printComment);


此外,我确信这只是你试图完成的一个简单的例子,但是你可以考虑使用链接或按钮而不是复选框。您对复选框的使用并没有真正遵循用户在web上使用复选框时所学到的预期体验。链接与大多数用户知道的体验更接近,因此不会给他们带来太多惊喜。(更少的惊喜意味着更快乐的用户,更少的学习和更多的使用。)

您在问题中提到了jQuery,但您没有将其标记为jQuery问题,也没有在示例中使用任何问题?选中复选框时,您希望查找并替换哪些文本?对不起,我添加了jQuery作为标记。你说得对,我还没有展示我使用的jQuery,它主要是一些设计元素来上下滑动div。我一直在浏览这个网站和其他网站,并试图在我的表单中加入一些jQuery元素。在本例中,当有人单击框3或框4时,我希望将输出中的“文本”替换为输入字段中输入的任何内容。这种取代基是否在.replace的能力范围内?使用烘焙到Javascript中的版本。这与jQuery无关。Eric,谢谢你的描述性回答。确实很有教育意义。另外,谢谢你给我的提示来改进我的表单代码。这个项目最初是为了让我学习HTML和javascript,正如您所怀疑的,我的许多代码并不像使用jQuery时那么优雅。在我现在学习jQuery的过程中,我将尝试合并您的建议,因为它们似乎比我当前的形式更易于扩展。还有一个问题,通过使用您的代码建议,它将在每个实例中替换生成的文本,而不仅仅是在使用某些复选框的情况下。如果框3和框4被选中,我应该包含一个使用您的代码的if/else参数,但如果框1或框2被选中,则使用原始代码,对吗?是的,您可以使用if/else。如果在这两种情况下存在大量不同的行为,您可能会考虑创建两种不同的处理函数,并仅为每种情况注册正确的函数(简化代码一点)。但是在这个简单的例子中,if/else可能是最好的选择。我试试看。
mytextbox.value += comLines[chosenComm.id].replace(/Text/, $('#usrinput1').val()) + "\n";
$('.comm-lines').on('change', printComment);