Javascript 全局变量不保留其值
Javascript global variable not retaining its value
我正在尝试使用两种 Javascript 方法访问全局变量。第一个应该写入变量,第二个应该读取它。
我有以下代码:
var selectedObj;
function first(){
selectedObj = window.getSelection();
alert(selectedObj);
}
function second(){
alert(selectedObj);
}
所以用户在一个内容可编辑的文本框中选择了一些文本。当函数 first() 运行时,它实际上会显示所选择的内容。所以我知道它的值进入了全局变量 selectedObj。
但是在运行函数second()之前,选中的文本变为未选中。但是,没有任何事情会显式设置 selectedObj 的值。因此,我希望它仍然保留用户先前选择的值。
但事实并非如此。当函数 second() 运行时,警报为空。
如果用户没有取消选择文本,警告将不会为空,所以我知道全局变量可以工作.但即使用户取消选择文本,我也需要它保留其值。
我怎样才能做到这一点?
来自文档(伙计,我喜欢文档):Window.getSelection()
Returns a Selection object representing the range of text selected by the user or the current position of the caret.
你真的回答了你自己的问题:
The alert won't be empty if the user doesn't deselect the text
您正在将 window.getSelection()
的结果分配给您的全局变量。
selectedObj = window.getSelection();
当结果为空时,你的全局是空的。正如@larz 在他的评论中所说,它很可能在 how/when 函数中被调用 first
。
就像其他人建议的那样,将其设置为局部变量(按值而不是引用)似乎可行。
var selectedObj;
function first() {
let newSelection = window.getSelection().toString();
selectedObj = newSelection;
alert(selectedObj);
}
function second() {
alert(selectedObj);
}
Lorem ipsum yada yada
<button onclick="first()">First</button>
<button onclick="second()">Second</button>
如问题所述,在 second() 运行之前,文本未被选中,导致 selectedObj 设置为空值。
如果 window.getSelection() !== ""
,您应该设置 selectedObj 的值
我正在尝试使用两种 Javascript 方法访问全局变量。第一个应该写入变量,第二个应该读取它。
我有以下代码:
var selectedObj;
function first(){
selectedObj = window.getSelection();
alert(selectedObj);
}
function second(){
alert(selectedObj);
}
所以用户在一个内容可编辑的文本框中选择了一些文本。当函数 first() 运行时,它实际上会显示所选择的内容。所以我知道它的值进入了全局变量 selectedObj。
但是在运行函数second()之前,选中的文本变为未选中。但是,没有任何事情会显式设置 selectedObj 的值。因此,我希望它仍然保留用户先前选择的值。
但事实并非如此。当函数 second() 运行时,警报为空。
如果用户没有取消选择文本,警告将不会为空,所以我知道全局变量可以工作.但即使用户取消选择文本,我也需要它保留其值。
我怎样才能做到这一点?
来自文档(伙计,我喜欢文档):Window.getSelection()
Returns a Selection object representing the range of text selected by the user or the current position of the caret.
你真的回答了你自己的问题:
The alert won't be empty if the user doesn't deselect the text
您正在将 window.getSelection()
的结果分配给您的全局变量。
selectedObj = window.getSelection();
当结果为空时,你的全局是空的。正如@larz 在他的评论中所说,它很可能在 how/when 函数中被调用 first
。
就像其他人建议的那样,将其设置为局部变量(按值而不是引用)似乎可行。
var selectedObj;
function first() {
let newSelection = window.getSelection().toString();
selectedObj = newSelection;
alert(selectedObj);
}
function second() {
alert(selectedObj);
}
Lorem ipsum yada yada
<button onclick="first()">First</button>
<button onclick="second()">Second</button>
如问题所述,在 second() 运行之前,文本未被选中,导致 selectedObj 设置为空值。
如果 window.getSelection() !== ""
,您应该设置 selectedObj 的值