18

好的,所以我在正文中有这段代码:

<input type="text" value="haha" id="full_name"/>

而脚本中的这段代码

<script language="javascript" type="text/javascript">
    function first(){
        var nameContent=document.getElementById('full_name').value;
    }

    function second() {
        first();
        y=nameContent; 
        alert(y);
    }
    second();
</script>

我想要一个显示元素 full_name 值的警报,但它似乎不起作用,有人知道为什么吗?:S

4

5 回答 5

20

nameContent仅存在于first()函数中,正如您在函数中定义的那样first()

为了使其范围更广,在函数之外定义它:

var nameContent;

function first(){
    nameContent=document.getElementById('full_name').value;
}

function second() {
    first();
    y=nameContent; alert(y);
}
second();

一个稍微好一点的方法是return取值,因为全局变量很快就会变得混乱:

function getFullName() {
  return document.getElementById('full_name').value;
}

function doStuff() {
  var name = getFullName();

  alert(name);
}

doStuff();
于 2012-08-05T03:52:39.817 回答
4

您的 nameContent 范围仅在第一个函数内。你永远不会以这种方式获得它的价值。

var nameContent; // now it's global!
function first(){
    nameContent = document.getElementById('full_name').value;
}

function second() {
    first(); 
    y=nameContent; 
    alert(y);
}
second();
于 2012-08-05T03:53:05.550 回答
1

您需要在第一个函数中使用 return 语句。

function first(){
    var nameContent = document.getElementById('full_name').value;
    return nameContent;
}

然后在您的第二个功能中可以是:

function second(){
    alert(first());
}
于 2012-08-05T03:53:58.433 回答
1

您的nameContent变量在函数范围内,并且在该函数之外不可见,因此如果您想使用函数的外部,请在标记内nameContent声明它并在没有关键字的情况下使用内部函数,如下所示global<script>var

<script language="javascript" type="text/javascript">
    var nameContent; // In the global scope
    function first(){
        nameContent=document.getElementById('full_name').value;
    }

    function second() {
        first();
        y=nameContent; 
        alert(y);
    }
    second();
</script>
于 2012-08-05T03:54:58.563 回答
0

在 ES5 中执行此操作的 OOP 方法是使用 this 关键字将该变量变为属性。

function first(){
    this.nameContent=document.getElementById('full_name').value;
}

function second() {
    y=new first();
    alert(y.nameContent);
}
于 2019-10-22T19:43:42.380 回答