javascript - Wt(诙谐)。对 Javascript 实现不起作用一无所知

标签 javascript c++ wt

我遇到了这个问题,我试图通过 Javascript 将事件监听器添加到弹出菜单。但它看起来,它没有附加或什么的。因为当我在弹出菜单上移动光标时,文本小部件的值没有改变。我做错了什么?

#define _SCL_SECURE_NO_WARNINGS

#include <vld.h>

#include <Wt/WApplication>
#include <Wt/WContainerWidget>
#include <Wt/WPushButton>
#include <Wt/WPopupMenu>
#include <Wt/WBreak>
#include <Wt/WJavaScript>

#include <windows.h>

class FooApplication : public Wt::WApplication {
public:
    FooApplication(Wt::WEnvironment const& env)
    : Wt::WApplication(env),
    container(new Wt::WContainerWidget(root())),
    signal(this, "signal"){

        text.setText("Press the button and You will see the current date and time.");
        text.setId("time");

        container.addWidget(&text);

        button.setId("button");
        button.setText("Date & Time!");
        button.setMenu(new Wt::WPopupMenu());
        //hider_button->menu()->setAutoHide(true, 0);
        button.menu()->setId("menu");
        button.menu()->addItem("First");
        button.menu()->addItem("Second");
        button.menu()->addItem("Third");
        button.menu()->addItem("Fourth");

        lineBreak = new Wt::WBreak(&container);

        container.addWidget(&button);

        button.clicked().connect([&](Wt::WMouseEvent const&) {
            text.doJavaScript("document.getElementById('time').innerHTML = Date()");
        });

        button.mouseWentOver().connect([&](Wt::WMouseEvent const&) {
            button.menu()->doJavaScript("document.getElementById('menu').style.overflow = 'hidden';");
            button.menu()->doJavaScript("document.getElementById('menu').style.height = '0px';");
            button.menu()->popup(&button);

            button.menu()->doJavaScript("function expand() {"
                "var target = document.getElementById('menu');"
                "var h = target.offsetHeight;"
                "var sh = target.scrollHeight;"
                "var loopTimer = setTimeout(expand, 8);"
                "if (h < sh) { h += 5; } else {"
                "clearTimeout(loopTimer); h = sh - 2;}"
                "target.style.height = h + \"px\";}"
                "expand();"
            );

            buttonMouseOn = true;
        });

        button.mouseWentOut().connect([&](Wt::WMouseEvent const&) {
            buttonMouseOn = false;
        });

        button.menu()->doJavaScript(
            "document.getElementById('menu').addEventListener('onmouseenter', function(){"
            //+ signal.createCall() +
            "document.getElementById('time').innerHTML = Date()})"
        );

        signal.connect(this, &FooApplication::changeValue);

    }

    void changeValue() {
        Beep(523, 500);
        if (menuMouseOn){
            menuMouseOn = false;
        } else {
            menuMouseOn = true;
        }
    }

    static FooApplication* create(Wt::WEnvironment const& env) {
        return new FooApplication(env);
    }

private:
    Wt::WContainerWidget container;
    Wt::WBreak* lineBreak;
    Wt::WText text;
    Wt::WPushButton button;
    Wt::JSignal<void> signal;
    bool buttonMouseOn = false;
    bool menuMouseOn = false;
};

int main(int argc, char** argv) {
    return Wt::WRun(argc, argv, &FooApplication::create);
}

最佳答案

应该是'mouseenter',而不是'onmouseenter':

document.getElementById('menu').addEventListener('mouseenter', function() { ... });

https://developer.mozilla.org/en-US/docs/Web/Events/mouseenter

关于javascript - Wt(诙谐)。对 Javascript 实现不起作用一无所知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34703291/

相关文章:

c++ - 为什么我可以在循环内重新初始化常量?

c++ - Makefile:链接库

apache - 重新加载 FastCGI 应用程序

c++ - 使用 std::for_each lambda 函数时出错

javascript - 链接 promise 强制异步

javascript - Passport JS "Can' t 在发送后设置标题"

c++全局定义和初始化结构

javascript - 如何获得td的大小

javascript - 在输入字段上使用 RegEx 添加和删除验证

c++ - 当维度大小不明确时传递多维数组函数