-4

我的任务是使用 javascript 和 jquery 生成一个网页,该网页采用用户提交的字符串并生成该字符串:abcde=>bcdea 我的问题是当我尝试运行程序时没有输出。我检查了错误控制台,它说旋转没有定义。我只是很困惑。

<!doctype html>
<!-- This page demonstrates several string properties and operations -->
<!-- =============================================================== --> 

<html>
<head>  
  <title> String Demo </title> 
  <script  src="..111/js/jquery-1.9.1.min.js"></script>
  <script type="text/javascript">
    function rotate(s)
    {
      result = $('#strBox').value;              
      "rotate:" + result
      var result = "";
      for (var i = 0; i< s.length; ++i){
        result = s.substring(1) + s.charAt(0);
        $('#outputDiv').innerHTML = 
      }
    }
  </script>
  </script>
</head> 

<body> 
  <h2>String Demo</h2>  
  <p>
    Enter a string: <input type="text" id="strBox" size=20 value="">
  </p>
  <input type="button" value="Click to Process" onclick="rotate();">                   
  <hr>
  <div id="outputDiv"></div> 
</body>
</html>
4

2 回答 2

1
function rotate(s)
{
  result = $('#strBox').value;              

看起来它创建了一个全局变量,但您将其声明得更低。最好在顶部声明变量,或者至少在第一次使用时声明。

  var result = $('#strBox').value;              

$(<selector>)返回一个 jQuery 对象。您正在获取该value对象的属性值,可能您想要所选元素的值(如果它有一个)。由于 jQuery 包装元素,您需要调用一个函数来访问属性:

  var result = $('#strBox').val();

.

  "rotate:" + result

相当于一个空语句,结果没有赋值所以没有任何效果。

  var result = "";

啊,有那个讨厌的声明。分配发生在以后。

  for (var i = 0; i< s.length; ++i){
    result = s.substring(1) + s.charAt(0);

这将为每个字符循环一次字符串,所以你最终得到了你开始的字符串。

    $('#outputDiv').innerHTML = 

jQuery 没有innerHTML属性,DOM 对象有。同样,jQuery 需要一个方法来进行属性访问。你需要实际分配一个值,所以:

    $('#outputDiv').html(result);

或者

    $('#outputDiv').text(result);
  }
}

但是由于浏览器会在更新 DOM 之前等待脚本停止运行,因此您不会看到任何变化(无论如何它可能只是模糊的)。

你可能想要的是这样的:

<script>

function rotate(element) {
  var s = element.form.strBox.value;
  document.getElementById('outputDiv').innerHTML = s.substring(1) + s.charAt(0);
}
</script>

<form>
  <p>Enter a string: <input type="text" name="strBox" size=20 value="">
  <p><input type="button" value="Click to Process" onclick="rotate(this);">                   
</form>  
<hr>
<div id="outputDiv"></div>

请注意,使用表单可以更轻松地访问表单控件,因为它们可用作表单的命名属性。

于 2013-03-16T02:15:33.620 回答
0
  1. 函数“旋转”采用未使用的参数。

    功能旋转{

  2. 结果未定义为另外两行的变量。值不是 jQuery 对象的属性。

    result = $('#strBox').value;              
    
  3. 文本 "rotate:" + 结果未分配给变量且没有分号

    "rotate:" + result
    
    var result = "";
    
  4. 此循环不是必需的,只需从字符串中取出第一个字符,将其删除,然后将其添加到字符串的末尾即可。

    for (var i = 0; i< s.length; ++i){
        result = s.substring(1) + s.charAt(0);
    
  5. “innerHTML”不是 jQuery 对象的有效属性。并且该值没有分配给任何东西。

        $('#outputDiv').innerHTML = 
    }
    

    }

于 2013-03-16T02:19:47.457 回答