为什么点击事件会在页面就绪事件后被触发?

时间:2017-10-18 04:53:10

标签: javascript jquery html cordova

请帮助我理解为什么我的cordova应用中的页面就绪事件会触发点击事件。一旦页面加载,单击事件就会被触发,如果没有选择国家/地区,它仍然会在单击“登录帮助”时尝试拍摄邮件。为什么? 在index.html

`<div class="app-login-email-help">
        <a id="EmailUsLink" class="app-login-email-help-text" href="#">
            <span>Login Help</span>
        </a>
</div>`

    $(document).on("pagecreate", function () {

        $x.page.login.init();

        $("#EmailUsLink").on('click', $x.page.login.ConstructLoginHelp);
         });
    });

在login.js

    ConstructLoginHelp: function () {
    var emailid = "APJ@gmail.com";
    var subjectLine = "Login Help";
    var emailBodyText = "Describe the login problem.";
    if($("#SelectCountry option:selected").val() != "undefined"){
        if ($("#SelectCountry option:selected").text()){
            if (!_.contains(['US', 'AU', 'CA', 'IN', 'MY', 'PH', 'SG', 'GB'], $('#SelectCountry').val())) {
                subjectLine = systemResources["LoginHelpSubjectLine".concat($("#SelectCountry option:selected").text())];
                emailBodyText = systemResources["LoginHelpEmailBody" + $("#SelectCountry option:selected").text()];
            } 
        }
        $x.page.login.elements.emailUsLink.attr('href', 'mailto:' + emailid + '?subject=' + subjectLine + '&body=' + emailBodyText);
    }
    else
        window.alert("Please Select Country");
}

有一个下拉列表,我没有写第一个元素(“选择国家/地区”)没有值。 我也在使用underscore.js 如有需要,请询问更多信息。

一旦页面开始加载ConstructLoginHelp,就会逐行执行,并且它会到达window.alert(这不应该在页面加载时发生)。现在它发生了两次。并且有趣的是链接点击不起作用。

2 个答案:

答案 0 :(得分:0)

您的专线存在问题:

$("#EmailUsLink").on('click',$x.page.login.ConstructLoginHelp());

通过将括号放在函数名的末尾,您正在执行函数而不是将其作为回调函数。 删除括号,它应该没问题。

答案 1 :(得分:0)

养成使用较小代码复制问题的习惯:mcve

为:

database.yml
$(document).on("ready", function () {
  $("a").on("click", sayHello());
});

function sayHello() {
  console.log("hello");
}

好:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#">Email us</a>
$(document).on("ready", function () {
  $("a").on("click", sayHello);
});

function sayHello() {
  console.log("hello");
}