2016-02-13 47 views
0

我正在构建一个登录/连接表单,它涉及一次输入一个字段(在模式样式框内),该表单很快被另一个字段替换。jquery函数阻止其他人开火

这一切工作,直到完美添加我的代码点击模态窗口外面,如下图所示

$(document).ready(function(){ 
    $("#loginJoinBackground").click(function(){ 
     $("#loginJoinBackground").fadeOut(300,function(){}); 
    }); 

    $("#logins-box").click(function(){ 
     event.stopPropagation(); 
    }); 
}); 

现在,也能正常工作什么是应该向。 问题是,当我拥有该代码时,它会阻止其他功能发射。有什么明显的我失踪了?

编辑:我使用流星或许这可能有不同的影响的事情,失败启用作为上述结果的代码如下:

$(document).on("click", "#loginB", function(){ 

logMeIn($("#logU").val(), ""); 
}) 
function logMeIn(emailVar, passwordVar = ""){ 
Meteor.loginWithPassword(emailVar, passwordVar, function(err){ 
    console.log(err.reason); 
    if(err.reason == "Incorrect password"){ 
     event.preventDefault(); 
     $("#spanEmailLogin").hide("slide", { direction: "left" }, 200); 
     $("#spanPasswordLogin").show("slide", { direction: "right" }, 200); 
     $("#logP").focus(); 
    } 



    else{ 
    event.preventDefault(); 
    $("#spanEmailLogin").hide("slide", { direction: "left" }, 200); 
    $("#spanPasswordLoginForm").show("slide", { direction: "right" }, 200); 
    $("#passwordForm").focus(); 
    } 
}); 


    } 
+0

想检查你的HTML以及 –

+0

传递事件对象的点击回调。 $(“#logins-box”)。click(function(){'==>'$(“#logins-box”)。click(function(event){' – Tushar

+0

@ Rivz11您是否检查了浏览器控制台的输出对于错误? – Obsidian

回答

0

无需对jQuery的事件click。您应该使用Template.events

试试这个,让我知道:

Template.youTemplate.events({ 
    'click #loginB': function (e,t) { 
    var emailVar = t.find('#logU').value 
    var passwordVar = t.find('#logP').value 
    Meteor.loginWithPassword(emailVar, passwordVar, function(err){ 
     console.log(err.reason); 
     if(err.reason == "Incorrect password"){ 
     e.preventDefault(); 
     $("#spanEmailLogin").hide("slide", { direction: "left" }, 200); 
     $("#spanPasswordLogin").show("slide", { direction: "right" }, 200); 
     $("#logP").focus(); 
     } else{ 
     e.preventDefault(); 
     $("#spanEmailLogin").hide("slide", { direction: "left" }, 200); 
     $("#spanPasswordLoginForm").show("slide", { direction: "right" }, 200); 
     $("#passwordForm").focus(); 
     } 
    }); 
    } 
}); 
+0

非常感谢@yudap,这几乎工作,它只是无法检测到emailVar和passwordVar的价值。所以我只是在几行内容中加入了你的建议,而且它很有效!在单击事件之后和Meteor.loginWithPassword位之前添加的行:var emailVar = document.getElementById(“logU”)。value; var passwordVar = document.getElementById(“logP”).value; – Rivz11

+0

@ Rivz11不需要'document.getElementById'。它将搜索整个文档。这会慢!为了更快速,请使用流星方式在定义的模板中查找ID。看修改后的答案 – asingh

0

你尝试调用preventDefault()方法来代替stopPropagation()

$(document).ready(function(){ 
    $("#loginJoinBackground").click(function(){ 
     $("#loginJoinBackground").fadeOut(300,function(){}); 
    }); 

    $("#logins-box").click(function(e){ 
     e.preventDefault() 
     //event.stopPropagation(); 
    }); 
}); 
+0

stopProppagation可能是当这个点击事件触发时没有触发任何其他事件的原因。因为stopPropagation是停止的在执行后冒泡任何其他事件 –

+0

不幸的是,它不起作用 - 点击模式内部会导致它在该实例中关闭 – Rivz11

+0

@ArpitJain确实 - 我尝试使用return false而不是stopPropagation,其中有奇怪的问题提到相同的结果.. – Rivz11

0
$(document).ready(function(){ 
$("#loginJoinBackground").click(function(){ 
$("#loginJoinBackground").fadeOut(300,function(){}); }); 
$("#logins-box").click(function(event){ 
event.stopPropagation(); 
}); 
}); 

可能工作IM不知道