Javascript全局变量不保留其值

时间:2017-05-10 14:43:29

标签: javascript global-variables selection contenteditable

我正在尝试使用两种Javascript方法访问全局变量。第一个应该写入变量,第二个应该读取它。

我有以下代码:

var selectedObj;
function first(){
    selectedObj = window.getSelection();
    alert(selectedObj);
}

function second(){
    alert(selectedObj);
}

因此,用户在可疑文本框中选择一些文本。当函数first()运行时,它实际上显示了所选的内容。所以我知道它的值是进入全局变量selectedObj。

但在运行函数second()之前,所选文本将被取消选中。但是,没有任何事情明确设置selectedObj的值。因此,我希望它仍然保留用户先前选择的值。

但事实并非如此。当函数second()运行时,警报为空。

如果用户 取消选择文本,则警告不会为空,因此我知道全局变量可以工作。但即使用户取消选择文本,我也需要保留其值。

我怎样才能实现这一目标?

3 个答案:

答案 0 :(得分:2)

< p>像其他人建议的那样,将其设置为局部变量(通过值而不是引用)似乎可行。< / p> < p>< div class =“snippet”data-lang =“js”data-hide =“false”data-console =“true”data-babel =“false”> < div class =“snippet-code”> < pre class =“snippet-code-js lang-js prettyprint-override”>< code> var selectedObj; function first(){   let newSelection = window.getSelection()。toString();   selectedObj = newSelection;   警报(selectedObj); } function second(){   警报(selectedObj); }< /代码>< /预> < pre class =“snippet-code-html lang-html prettyprint-override”>< code> Lorem ipsum yada yada < button onclick =“first()”> First< / button> < button onclick =“second()”> Second< / button>< / code>< / pre> < / DIV> < / DIV> < / p为H.

答案 1 :(得分:1)

来自文档(我热爱的文档):Window.getSelection()

  

返回一个Selection对象,表示用户选择的文本范围或插入符的当前位置。

你真的回答了自己的问题:

  

如果用户未取消选择文字

,则警告不会为空

您要将window.getSelection()的结果分配给您的全球。

selectedObj = window.getSelection();

当结果为空时,您的全局为空。就像@larz在他的评论中所说,最有可能的是如何/何时调用函数first

答案 2 :(得分:0)

如前所述,在second()运行之前,文本将被取消选中,从而导致selectedObj设置为空值。

如果window.getSelection()!==“”

,你应该设置selectedObj的值