我的javascript代码是:
$("#yes").click(function() { mergeSort(arr); });
function mergeSort(arr)
{
var arr = getDataFromInput();
if (arr.length < 2)
return arr;
var middle = parseInt(arr.length / 2);
var left = arr.slice(0, middle);
var right = arr.slice(middle, arr.length);
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right)
{
var result = [];
while (left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
}
while (left.length)
result.push(left.shift());
while (right.length)
result.push(right.shift());
writeResultToOutput(result);
}
function getDataFromInput() {
return $("#w").val();
}
function writeResultToOutput(resultHTML) {
$("#z").html(resultHTML);
}
我的HTML是:
<body>
<label for="w">entry information</label><br>
<textarea rows="40" cols="100" name="w" id="w"></textarea>
Results
<div id="z"></div>
<button id="yes">Begin!</button>
</body>
理论上的目标是使用mergesort按字母顺序对此进行排序,但是当我输入一些像“空气无聊”这样的字样时并且按开始没有真正发生。这段代码出了什么问题? 我收到错误:
ReferenceError:$未定义
我知道html没有正确链接到JavaScript,但这不是问题,因为很明显我知道如何连接这两个。
我会在修改后给你完整的代码(错误消失但仍然没有对单词进行排序):
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$("#yes").click(function() { mergeSort(arr); });
function mergeSort(arr)
{
var arr = getDataFromInput();
if (arr.length < 2)
return arr;
var middle = parseInt(arr.length / 2);
var left = arr.slice(0, middle);
var right = arr.slice(middle, arr.length);
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right)
{
var result = [];
while (left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
}
while (left.length)
result.push(left.shift());
while (right.length)
result.push(right.shift());
writeResultToOutput(result);
}
function getDataFromInput() {
return $("#w").val();
}
function writeResultToOutput(resultHTML) {
$("#z").html(resultHTML);
}
</script>
</head>
<body>
<label for="w">entry information</label><br>
<textarea rows="40" cols="100" name="w" id="w"></textarea>
Results
<div id="z"></div>
<button id="yes">Begin!</button>
</body>
</html>
最新版本:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<label for="w">entry information</label><br>
<textarea rows="40" cols="100" name="w" id="w"></textarea>
Results
<div id="z"></div>
<button id="yes">Begin!</button>
<script type="text/javascript" src="jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$("#yes").click(function() {
var arr = getDataFromInput();
mergeSort(arr);
});
function mergeSort(arr)
{
if (arr.length < 2)
return arr;
var middle = parseInt(arr.length / 2);
var left = arr.slice(0, middle);
var right = arr.slice(middle, arr.length);
return merge(mergeSort(left), mergeSort(right));
}
function merge(left, right)
{
var result = [];
while (left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
}
while (left.length)
result.push(left.shift());
while (right.length)
result.push(right.shift());
writeResultToOutput(result);
}
function getDataFromInput() {
return $("#w").val();
}
function writeResultToOutput(resultHTML) {
$("#z").html(resultHTML);
}
</script>
</body>
</html>
仍然没有有效的输出,我的意思是没有任何输出
答案 0 :(得分:1)
首先:
你的脚本在你的HTML之前。它在呈现之前就开始运行。 如果您要将其保留在HTML中,请将其放在正文结束标记之前。
要在点击时执行功能,您可以这样做:
$("#yes").click(mergeSort());
无需执行匿名功能。你已经有了一个名字。 而且您正在尝试传递之前尚未创建的参数。 &#34; var arr&#34;在函数内部。 开始检查这些东西,然后从那里开始。我稍后会回到这里。
希望它对你有所帮助。
答案 1 :(得分:0)
ReferenceError: $ is not defined
表示未包含jQuery或在您的页面中包含jQuery之前编写代码
包含jQuery
库,然后重试
http://code.jquery.com/jquery-1.10.2.min.js
修改
你需要像我这样调用我们的函数
$("#yes").click(function() {
var arr = getDataFromInput();
mergeSort(arr);
});
并从mergeSort函数中删除var arr = getDataFromInput();
function mergeSort(arr)
{
//var arr = getDataFromInput(); this line is removed
if (arr.length < 2)
return arr;