构建,修改,输出Javascript数组

时间:2013-06-17 00:31:38

标签: javascript jquery arrays

我正在尝试完成以下操作......如果它在一个问题中提出太多要求,那么使用哪些事件的一些简单步骤仍然会有所帮助。

有两个空白的textareas坐在彼此旁边 - 输入和输出。它们之间是两个输入前后。我想在换行符中输入或粘贴单词列表,例如:

melons
peaches
apples

然后使用Before和After输入在每个关键字之前和之后添加单词/短语/符号。因此,如果我在之前输入'buy'并在之后输入'today',则输出文本区域将显示:

buy melons today
buy peaches today
buy apples today

我想在没有任何页面刷新的情况下完成此任务。我们可以假设表单元素的命名如下:

<textarea id="input"></textarea>
<input type="text" id="before" />
<input type="text" id="after" />
<textarea id="output"></textarea>

我一直尝试使用此代码至少让输入文本显示在输出中,但这甚至不起作用:

    $(document).ready(function(){
        $('#input').keyup(function(e){
            $('#output').html($(this).val());
        });
    });

任何指导都很棒!

3 个答案:

答案 0 :(得分:1)

紧凑的:

$("#input,#before,#after").on("keyup", function () {
    $("#output").val(
    $.map($("#input").val().split("\n"), function (n, i) {
        return $("#before").val() + " "+ n + " " + $("#after").val();
    }).join("\n"));
});

example

答案 1 :(得分:0)

这样可以解决问题:

function update_output(){
    //Split input by newline
    var input_words = $('#input').val().split('\n');
    var output_lines = new Array();
    //Iterate over each keyword and prepend and append values
    $.each(input_words, function(i, word){
        output_lines.push($('#before').val()+' '+word+' '+$('#after').val());
    });
    //Display output in textarea
    $('#output').val(output_lines.join('\n'));
}

您只需要选择何时更新输出文本区域,也可以将其绑定,以便每次#input或#before和#after更改时都会更新:

$('#input,#before,#after').on('change',update_output);

答案 2 :(得分:0)

好的,我可以帮助你开始吧。我的答案并不完整,但你可以从这里得到一个很好的主意。注意我写这段代码很容易理解,我没有故意使用复杂的方法。

<html>
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
$( document ).ready(function() {
    $("#input").keypress(function(key){
        if(key.which == 13) {
            refreshData();
        }
    });
});

function refreshData() {
    var beforeVal = $("#before").val();
    var inputLines = $("#input").val().split(/\r\n|\r|\n/g);
    var desiredOutputVal = "";
    for(var i=0; i<inputLines.length; i++) {
        desiredOutputVal += beforeVal + inputLines[i] + "\n";
    }
    $("#output").val(desiredOutputVal); 
}

</script>
</head>
<body>
<form>
    <textarea id="input"></textarea>
    <input type="text" id="before" />
    <input type="text" id="after" />
    <textarea id="output"></textarea>
</form>
</body></html>