2012-11-17 135 views
1

當一個按鈕被點擊時,我們通常會調用一個javascript函數。如何在變量值變化時調用Javascript函數?

<button onclick=function1();>Post message</button> 

有時,我們可能會在特定的時間調用一個javascript函數。

window.onload = myFunction(); 
      function myFunction() 
      { 
       setInterval(function1,t); 
      } 

其中function1()是任何javascript函數。我只想在腳本中變量的值發生變化時調用此函數。

例如:可以說我有一個變量abc。現在,當我使用下面的函數選擇頁面上的某些內容時,該變量的值會發生變化。

var abc = function getSelectionHTML() { 
     var userSelection; 
     if (window.getSelection) { 
     // W3C Ranges 
     userSelection = window.getSelection(); 
     // Get the range: 
     if (userSelection.getRangeAt) { 
      if (userSelection.rangeCount > 0) 
     var range = userSelection.getRangeAt(0); 
      else 
     return ''; 
     } else { 
      var range = document.createRange(); 
      range.setStart (userSelection.anchorNode, userSelection.anchorOffset); 
      range.setEnd (userSelection.focusNode, userSelection.focusOffset); 
     } 
     // And the HTML: 
     var clonedSelection = range.cloneContents(); 
     var div = document.createElement ('div'); 

     div.appendChild (clonedSelection); 
     return div.innerHTML; 
     } else if (document.selection) { 
     // Explorer selection, return the HTML 
     try { 
      userSelection = document.selection.createRange(); 
      return userSelection.htmlText; 
     } catch (err) { 
      return ''; 
     } 
     } else { 
     return ''; 
     } 
    } 

如何提醒(ABC)的變量的變化,只有當價值?請幫忙!

回答

1

如果您的目標是「現代」瀏覽器,則可以使用Object.defineProperty來定義setter函數,即每次設置相應字段的值時調用get函數。

由於JS「全局」變量只是window對象柔的成員應該能夠做到像

Object.defineProperty(window, "abc", { set: function(v) { 
    /* this is run every time abc is assigned a value: 
    the value being assigned can be found in v */ 
} }); 
1

首先,你需要定義變量abcCustom Setters and Getters

var value_of_abc; 
Object.defineProperty(window, 'abc', { 
    get: function() { 
     console.log('get!'); 
     return value_of_abc; 
    }, 
    set: function(value) { 
     console.log('set!'); 
     value_of_abc = value; 
    } 
    }); 

然後,無論何時您致電或更改變量abc,這裏的事情都會發生。

window.abc //get! 
window.abc = 1 //set!