javascript在另一个if语句中获取对象

时间:2015-09-21 17:50:02

标签: javascript

是否可以访问另一个if语句中的对象?因为情况是这样的。

我有一个编辑按钮,它会将<div>设置为contenteditable。因此,如果我按下取消按钮,<div>内的文本也应重置。现在我的javascript就像这样

$('.class').on('click','.etc',function(){
    var orig = {};
    $a = $(this).('.etc').text().trim(); // just getting the text of the button
    if($a == "Edit") // just checking if edit button
    {
        orig.text = $(this).find('original-text').text(); // should store the original text
    }
    else if ($a == "Cancel")
    {
        // the div must be set to the original text
        alert(orig.text); // undefined
    }
});

我真的迷失在这里

2 个答案:

答案 0 :(得分:1)

将变量声明在cell.imageText.adjustsFontSizeToFitWidth = trueif条件可访问的范围内,或者可以在全局范围内。但在尝试访问其属性之前,请确保已初始化它!

else

答案 1 :(得分:0)

问题出在变量orig的范围内。 JS具有功能级词汇范围。

所以要回答你的标题问题,是的,你可以访问在if的{​​{1}}中的in中创建的变量,只要在if有else之后肯定会发生else发生过至少一次。但这并不是造成问题的原因。

您的问题是您试图将此变量保留在onclick函数之外。当该函数结束时,变量的寿命也是如此。简单的解决方法是在函数外部声明它并使用JS闭包。

var orig = {};
$('.class').on('click', function () {
    if ($(this).text() == "Store") {
        orig.text = $("#display").text();
    } else if ($(this).text() == "Cancel") {
        alert(orig.text);
    }
});

我不得不调整一下,因为我不知道你的完整HTML,但it works

<强>更新 为了避免全局变量的不良做法,您可以为整个事物创建一个封闭的范围:

(function () {
    var orig = {};
    $('.class').on('click', function () {
        if ($(this).text() == "Store") {
            orig.text = $("#display").text();
        } else if ($(this).text() == "Cancel") {
            alert(orig.text);
        }
    });
})();

And here's that in practice