如何在IIFE中正确包装此代码或使用其他方法

时间:2017-12-16 21:12:49

标签: javascript

我想限制另一个代码,因为我不想使用全局变量checkbox它只应在IIFE区域中可见。 我尝试这样做,但是当我点击checkbox时,会弹出一个错误,这是合乎逻辑的,但我不知道如何正确地做到这一点。

我的代码如何运作?

激活input,=&gt;允许访问编辑。选择cell =&gt;该文本属于apply。更改文字,按 <table id="tableCinema" style="border-collapse: collapse;" border="1" > <tr> <th >Type</th> <th >Name</th> <th >Time</th> </tr> <tr> <td >1</td><td >*</td><td >*</td> </tr> </table> Change: <input id="changes" type="checkbox" name="" onclick="eventsInTable()"><br> Get text for change: <input id="changeText" type="text" name="" value=""> <button id="applyToChanges">Apply</button> =&gt;文字改变了。

var targetElement;

var inputChangeText = document.getElementById('changeText');
var applyChanges = document.getElementById('applyToChanges');

applyChanges.addEventListener('click', function() {
  if (targetElement) {
    targetElement.textContent = inputChangeText.value;
  }
}, false);

//change text
var changeText = function(e) {
  inputChangeText.value = e.target.textContent;
  targetElement = e.target;
}

//allow to change
function eventsInTable() {
    var checkBoxChanges = document.getElementById('changes');
    var table = document.getElementById('tableCinema');

    if (checkBoxChanges.checked) {
        table.addEventListener('click', changeText, false);
    } else {
        table.removeEventListener('click', changeText, false);
        alert("You haven't access to change");
    }
}   
System.out.println(account.getaccountNum() + " : " + account.isValidLength(account.getaccountNum());

1 个答案:

答案 0 :(得分:1)

如果你想从HTML属性中调用它,那么它必须是全局可用的,但是,它可以将你的全局污染保持在一个全局变量中,并将其他所有内容作为属性。

window.MyNamespace = (function() {
   // your protected code

   // return an object that has whatever you want to access
   return {
     eventsInTable: myLocalEventsInTableFunction
     // other stuff
   }
})();

然后通过命名空间调用您的处理程序。

Change: <input id="changes" type="checkbox" name=""
  onclick="MyNamespace.eventsInTable()"><br>