2015-09-21 5 views
0

Возможно ли получить доступ к объекту внутри другого оператора if? Потому что ситуация такая.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 
    } 
}); 

Я действительно потерял в здесь

+0

Пожалуйста, включите HTML-код, а также , Вы используете JQuery? – adrield

+1

'if' и' else' не могут звонить одновременно. – urfusion

+0

Чтобы получить текст элемента, лучше использовать функцию 'text()'. –

ответ

1

Объявляем переменную в сферу, где он доступен как и условия в ifelse или, возможно, в глобальном масштабе. Но убедитесь, что он инициализирован, прежде чем пытаться получить доступ к его свойствам!

var orig = {text:""}; 
    $('.class').on('click','.etc',function(){ 

    if($a == "Edit") // just checking if edit button 
    { 
     orig.text = $(this).find('original-text').text(); 
    } 
    else if ($a == "Cancel") 
    { 
     alert(orig.text); 
    } 
}); 
+0

обновил мой код – iamdevlinph

+0

@iamDevlin обновил ответ. Теперь при попытке получить доступ к свойству текста он будет иметь пустую строку. –

+0

Все еще не работает. Я хотел бы обновить 'orig.text', чтобы получить исходный текст, а затем пусть оператор' Cancel' if получит доступ к этому 'orig.text' из инструкции' Edit' if. – iamdevlinph

0

Вопрос относится к сфере применения переменной orig. JS имеет лексический охват уровня функции.

Так, чтобы ответить на ваш вопрос в заголовке, да, вы можете получить доступ к переменной, созданный в в в 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.


UPDATE Чтобы избежать плохой практики глобальных переменных, которые вы можете создать замкнутый объем для всей вещи, как так:

(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

Смежные вопросы