javascript - 如何在变量值发生变化时调用 Javascript 函数?

标签 javascript function variables dom-events

通常我们在单击按钮时调用 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 '';
      }
    }

如何alert(abc)只有当变量的值改变时?请帮助!

最佳答案

如果您的目标是“现代”浏览器,您可以使用 Object.defineProperty定义一个 setter 函数,即每次设置相应字段的值时都会调用的函数。

因为 JS 中的“全局”变量只是窗口对象的成员,所以你应该能够做类似的事情

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 */
} } );

关于javascript - 如何在变量值发生变化时调用 Javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13428245/

相关文章:

javascript - jqgrid 寻呼机在插入新网站时失去良好的风格

javascript - jQuery live() 在 Firefox 中不显示文本光标

javascript - 如何输出数组中所需的元素

返回所有错误

function - (a -> a) 和 a -> a 之间的区别

python - 如何在Python中列出自己定义的所有变量,不包括导入的变量?

javascript - 结合 knockout 锯齿状阵列

javascript - 简单参数 Javascript 函数

c++ - c++11 lambda 真的支持闭包吗?函数变量中存在语义冲突

当请求时,PHP 将 mysql 查询作为变量传递给第二个 php 脚本