请帮助我理解为什么我的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(这不应该在页面加载时发生)。现在它发生了两次。并且有趣的是链接点击不起作用。
答案 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");
}