Javascript addEventListner仅在应用程序创建时工作

Javascript addEventListner仅在应用程序创建时工作,javascript,windows-8,winjs,Javascript,Windows 8,Winjs,由于某种原因,我的事件处理代码停止工作。 我正在开发一些处理indexedDB的函数,当我回到界面上时,我注意到EventHandler只在应用程序创建时工作,即使我没有对它们执行任何操作,它们也会停止工作。 这是我的default.js (function () { "use strict"; WinJS.Binding.optimizeBindingReferences = true; var app = WinJS.Application; var activation = Windo

由于某种原因,我的事件处理代码停止工作。 我正在开发一些处理indexedDB的函数,当我回到界面上时,我注意到EventHandler只在应用程序创建时工作,即使我没有对它们执行任何操作,它们也会停止工作。 这是我的default.js

(function () {
"use strict";

WinJS.Binding.optimizeBindingReferences = true;

var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;
var _swAlarm;

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {

        } else {

        }
        args.setPromise(WinJS.UI.processAll());
    }
};

app.oncheckpoint = function (args) {

};

function testSelection(value) {
    console.log("from event listner "+value)
}

function getDomElements() {
    _swAlarm = document.getElementById("swAlarm");
}

function registerHandlers() {
    _swAlarm.addEventListener("onchange", console.log("ola"));
}


app.onready = function () {
    getDomElements();
    registerHandlers();
}

app.start();
这是我的default.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>MyApp</title>

    <!-- WinJS references -->
    <link href="//Microsoft.WinJS.1.0/css/ui-dark.css" rel="stylesheet" />
    <script src="//Microsoft.WinJS.1.0/js/base.js"></script>
    <script src="//Microsoft.WinJS.1.0/js/ui.js"></script>

    <!-- my references -->
    <link href="/css/default.css" rel="stylesheet" />
    <script src="/js/default.js"></script>
    <script src="/js/database.js"></script>

    <!-- jquery references -->
    <script src="js/jquery-1.8.2-win8-1.0.js"></script>
    <script src="js/visualize.jQuery.js"></script>
    <script type="text/javascript"> jQuery.isUnsafe = true;</script>
    <link href="/css/default.css" rel="stylesheet" type="text/css">
</head>

<body>
    <div id="content">
        <div id="settings">
            <h2 id="lAlarm">Alarm</h2>
            <div id="swAlarm" data-win-control="WinJS.UI.ToggleSwitch" ></div>
            <input id="iMaxval" type="number">
            <input id="iMinval" type="number">
            <button id="bSave">Save</button>

        </div>

        <div id="graph">
            <h2 id="hGraph" class="graph">Graph</h2>
        </div>

        <div id="stats">
            <h2 id="hStats" class="stats">Stats</h2>
        </div>
    </div>
</body>
</html>

MyApp
jQuery.isUnsafe=true;
报警
拯救
图表
统计数据

运行此代码时:

\u swAlarm.addEventListener(“onchange”,console.log(“ola”)

你是:

  • 正在运行控制台日志(“ola”)
  • 在更改_swAlarm时将结果作为事件的回调进行影响
  • 这在很多方面都是错误的

  • console.log(“ola”)
    不返回回拨。我想我理解你的意思,正确的代码可能是:
    function(){console.log(“ola”);}
  • 使用
    addEventListener
    时,必须与事件命名一起使用。在您的情况下,
    onchange
    需要改为
    change
    。如果必须在html中直接影响此事件,则必须使用
    onchange=“console.log(“ola”);”
    。但不能使用
    addEventListener
  • 最终结果是:

    \u swAlarm.addEventListener(“change”,function(){console.log(“ola”);},false)

    至于它为什么要在应用程序创建上工作,我认为这仅仅是因为在应用程序创建
    console.log(“ola”)
    上,在event-affectation中立即调用了,但是由于以后没有任何事件实际受到影响,所以对于
    onchange
    事件,您不会得到任何结果



    另一方面,由于我猜您是在从“旧”语法(onchange…等)迁移到
    addEventListener
    api,我将添加这两种模式之间的一个重要区别:当以旧方式执行事件时,
    引用
    窗口。但是通过
    addEventListener
    影响回调会使
    DomeElement
    本身(
    \u swAlarm
    )在回调执行期间成为
    的目标。

    关闭
    (函数(){
    ?谢谢,这非常有用:)如果你想看到事件名称,我添加了dom的链接。基本上是一样的,但是没有“开”,因为我认为几乎所有的事件都是这样