繁体   English   中英

JS对象中的回调在JQuery事件上不起作用

[英]Callback inside JS Object Not Working on JQuery event

更新 :在帮助下,我能够找到问题所在。 是if(!actions)对函数引用起作用。 一旦我删除了“!”,它就起作用了。 这是我的一个错误,因为我想首先检查它是否具有引用。 我的新问题是那是什么! 运算符对将导致其求值为true的函数进行了处理,然后更改了导致该函数失败的引用(在这种情况下,未检测到调试器中的错误)?

原始:我创建了一个JavaScript函数,该函数封装了一些变量,并在单击JQuery UI对话框按钮时执行回调。 这是该函数的javascript:

function LoginControl(parentDiv, usernameInput, passwordInput, action)
{
    var that = this;
    var container = parentDiv;
    var user = usernameInput;
    var password = passwordInput;
    var actions = action;

    that.init = function()
    {
        container.dialog(
            {
                modal:true,
                show:false,
                buttons: {"Login":Login, Cancel:Close }
            }
        );
    };

    var Login = function (evt) {
        if (!actions)
            actions();
    };

    var Close = function()
    {
        container.dialog("close");
        if(!actions)
            actions();
    };

    that.show = function(evt)
    {
        container.dialog("open");
    };
}

问题出在执行动作功能的登录/关闭功能中。 当它执行时,调试器将向我发出警告“由于“ this”对象不正确,正在忽略具有[LenientThis]的属性的get或set”。 该功能未执行。 这是HTML(我省略了外部jquery源文件,但我使用的是JQuery 2.0.3和JQuery UI 1.1.3。我无法弄清楚这一点,并为之困扰。我尝试使用“ call”,“绑定”和“应用”方法均无效。请提供帮助和建议。谢谢!

<html>
<head lang="en">
    <script type="text/javascript">
        function onAction()
        {
            alert("Hello!");
        }

        $(document).ready(function() {
            var loginCtrl = new LoginControl($("#login"), $("#username"), $("#pass"), onAction);

            loginCtrl.init();
            loginCtrl.show();
        });
    </script>
</head>
<body>
<div id="login">
    <form>
        <label for="username">User Name:</label> <input type="text" id="username" /><br>
        <label for="pass">Password:</label><input type="password" id="pass" />
    </form>
</div>
</body>
</html>

您需要将LoginClose更改为that.Login =that.Close = 它们当前是函数内部的变量,外部不可见。 同样将buttons: {"Login":Login, Cancel:Close }更改为buttons: {"Login":that.Login, Cancel:that.Close }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM