将变量分配给函数在JavaScript中不起作用

Assign variable to function does not work in JavaScript?

本文关键字:JavaScript 不起作用 函数 变量 分配      更新时间:2023-09-26

我有一些代码可以读取突出显示的文本。但是我在JavaScript中为函数分配变量时遇到了问题。它没有按预期正确调用函数。

<html>
<head>
<script type="text/javascript">
function getSelectionText()
{
    var text = "";
    if (window.getSelection)
    {
        text = window.getSelection().toString();
    }
    return text;
}
var txt = getSelectionText();   //<-----This is not working???
</script>
</head>
<body>
<p id="p1">Select some of this text then press the button<br /></p>
<button onclick= document.write(txt) >GetText</button>
</body>
</html>

如果我在写参数中使用该函数,它会起作用。

<button onclick= document.write(getSelectionText()) >GetText</button>

如果我给函数赋值,为什么不能正确调用它?

-ScottA

页面加载时调用getSelectionText(),因此此时不会选择任何文本。

您需要从事件处理程序中调用它。

此外,您是:

  • 使用内部事件属性(不应该使用)
  • 不引用你的属性值(这是不好的做法)
  • 加载文档后(当文档处于关闭状态时)尝试调用document.write

这不是分配变量,而是在调用函数时分配变量。

在您的工作版本中,按下按钮时会调用getSelectionText()。在不起作用的版本中,一旦加载<script>标记,就会调用getSelectionText()。。。并且当按下按钮时,先前呼叫的结果就是正在使用的结果。

因为你想要的是在按下按钮时调用函数,所以这就是你明确需要做的。

我刚刚让您的代码开始工作。大部分情况下。基本上,我不依赖txt变量,而是使用您的主函数打印到网页上。你为什么不试试这个,看看你想改进什么。

您的行var txt=。。。正在将全局变量txt初始化为getSelectionTxt()的返回值

理解全局变量是如何初始化的关键是要意识到赋值是在加载javascript时进行的,而不一定是在加载HTMLDOM时进行的。因此,在许多情况下,在DOM的其他部分准备就绪之前,全局分配的评估会太早。

延迟的一种方法是使用body.nload事件或函数。您可以在body标记中设置事件,例如,在适当的时间调用您的某个函数。

<body onload="initializeMyGlobalsFromDom()">

其中initializeMyGlobalsFromDom是一个包含行的函数txt=getSelectionTxt();//注意:省略var关键字,将txt称为全局

(您应该继续在函数外声明"var.txt;",最佳实践可能会在函数内使用它之前说。)

还有一些方法可以在不需要HTML标记中的属性的情况下挂接事件。在全局上下文中(现在您有var txt=…),您可以执行

window.addEventListener("onload",initializeMyGlobalsFromDom);

另一种选择是将函数本身分配给全局变量,如:

var txtFn=getSelectionText;//钞票分配功能不是功能返回值

然后,当你使用全局变量时,你必须称之为:

<button onclick="document.write(txt())">GetText</button>