我怎样才能获得文本区域的价值?

时间:2013-07-09 09:51:33

标签: javascript

我有两个文件 1)的index.php 和 2)code.js

现在index.php中的代码低于

<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<link href="http://web.guru99.com/lib/codemirror.css" rel="stylesheet" />
<script type="text/javascript" src="code.js"></script>
<style type="text/css">
    .CodeMirror {
    border: 1px solid #eee;
    height: auto;
}
.CodeMirror-scroll {
    height: auto;
    overflow-y: hidden;
    overflow-x: auto;
}
</style>
</head>
<body>
Integer : whole numbers e.g. -3, 0, 69. The maximum value of an integer is platform-dependent. On a 32 bit machine, its usually around 2 billion. 64 bit machines usually have larger values. The constant PHP_INT_MAX is used to determine the maximum value.
<pre class="codeguru">say 'hi';</pre>
Let us now look at how PHP determines the data type depending on the attributes of the supplied data.
<pre class="codeguru">say 'hello';</pre>
Floating point numbers
<pre class="codeguru">say 'you r amazing';</pre>
Character strings
<pre class="codeguru">say 'i am fine';</pre>
</div>
<form class="hidden code-box" method="GET" name="sample">
<div dir="ltr"><textarea class="php" name="codeguru"></textarea></div>
<input type="submit" value="Run" onclick="execute();"/>
</br></br>
Output:</br></br>
    <textarea id="print-result" disabled="true" cols="77"></textarea></br>
</form></div>
</body>
</html>

和code.js文件包含下面的代码

$(document).ready(function() 
{
    $('pre.codeguru').each(function() 
    {
            var pre = this;
            var form = $('form[name=sample]').clone();
            $(form).removeAttr('name');
            $(form).removeClass('hidden');
            $($(form).find('textarea')[0]).val($(pre).text());
            var id = $(pre).attr('id');
            $(form).find('div textarea[name=code]').first().attr('id', id);
        $(pre).replaceWith(form);
        });
        window.editors = [];
        $('textarea[name=codeguru]').each(function() 
        {
            window.editor = CodeMirror.fromTextArea(this, 
            {
                lineNumbers: true,
                matchBrackets: true,
                mode: "application/x-httpd-perl",
                tabMode: "shift"
             });
                editors.push(editor);
        });

});
function execute() {
            p5pkg.CORE.print = function(List__) {
                var i;
                for (i = 0; i < List__.length; i++) {
                  document.getElementById('print-result').value += p5str(List__[i])
                }
                return true;
            };
            p5pkg["main"]["v_^O"] = "browser";
            p5pkg["main"]["Hash_INC"]["Perlito5/strict.pm"] = "Perlito5/strict.pm";
            p5pkg["main"]["Hash_INC"]["Perlito5/warnings.pm"] = "Perlito5/warnings.pm";
            var source = editor.getValue();
            alert(source);
            var pos = 0;
            var ast;
            var match;
            document.getElementById('print-result').value = "";
            try {
                var start = new Date().getTime();
                var js_source = p5pkg["Perlito5"].compile_p5_to_js([source]);
                var end = new Date().getTime();
                var time = end - start;
                // run
                start = new Date().getTime();
                eval(js_source);
                end = new Date().getTime();
                time = end - start;
            }
            catch(err) {
                //document.getElementById('log-result').value += "Error:\n";
                  }
        }

我的代码中的一切运行正常。在code.js中,pre标签被textarea替换,textarea中的代码应该运行,因为这个项目是在线perl编辑器。所以现在我的问题是我已通过此代码提醒文本区域的值

var source = editor.getValue();
            alert(source);

但是会弹出空白。那么我需要做什么来检索textarea的当前值?

1 个答案:

答案 0 :(得分:0)

您已在此代码中创建了多个编辑器。这些似乎存储在editors数组中。现在,您希望通过单击按钮来执行execute(),但是您没有告诉JS,要警告哪个编辑器值。

页面上第一个编辑器的值可以达到:

var source = editors[0].getValue();

editor.getValue()应该为您提供editors数组中最后一个编辑器的值。

由于每个编辑器都有一个单独的按钮,因此您可以将editors数组中的编辑器索引传递给execute()函数。

首先,从按钮输入中删除onclick属性,然后:

$('pre.codeguru').each();之后,将eventlisteners附加到按钮:

var n = 0;
$('input[type=button]').each(function () {
        $(this).click(function (x) {
            return function () {
                execute(x);
            };
        }(n++))
    }
); 

execute()

function execute(idx) {
        ...
    var source = editors[idx].getValue();
    alert(source);
        ....    
}

<强>更新

更新了小提琴代码以输出到相应的字段。

这是an updated live demo