首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于JavaScript和onclickEvent的问题

关于JavaScript和onclickEvent的问题
EN

Stack Overflow用户
提问于 2015-08-14 13:56:08
回答 2查看 83关注 0票数 0

我正在创建一个网站,为了登录和订阅,我去了jquery.avgrund ( PopIn) .

代码语言:javascript
复制
<html>
<head>

<!-- CSS,JS ... -->

<script>


function myFunction() {

$('.tab a').on('click', function (ev) {

  ev.preventDefault();
  $(this).parent().addClass('active');
  $(this).parent().siblings().removeClass('active');

target = $(this).attr('href');
$('.tab-content > div').not(target).hide();
$(target).fadeIn(600);

});

return false;
}

</script>

</head>
<body>


<script src="js/jquery.avgrund.js"></script>

    <script>
    $(function() {
        $('#show').avgrund({
            showClose: true,
            showCloseText: 'close',
            onBlurContainer: '.container',
            template:


        '<br>'+
        '<ul class="tab-group">'+
        '<li class="tab active">'+
        '<a href="#signup" id="inscriptionMenu" onclick="return myFunction()">Inscription</a>'+'</li>'+
        '<li class="tab">'+'<a id="loginMenu" href="#login" onclick="return myFunction()">Log In</a>'+'</li>'+
        '</ul>'+   


       '<div class="tab-content">'+
        '<div id="signup">'+    

            '<div class="field-wrap">'+
           '<br>'+'<br>'+
           '<h1>Inscription</h1>'+'<br>'+
'<label class="label2">Email Address<span class="req">*</span>'+'</label>'+
'<br>'+'<br>'+'<input type="email" required="" autocomplete="off" class="input1">'  +
          '</div>' +

'<div class="field-wrap">'+
'<label class="label2">Password<span class="req">*</span>'+'</label>'+
'<br>'+ '<br>'+'<input type="password" required="" autocomplete="off" class="input1">'  +
          '</div>'+'<br>'+
  '<input type="button" value="s\'inscrire" class="buttonlogin" >'+'<br>' +'<br>'
  +'<h3>-- OU --</h3>'+'<br>'+

  '<input type="button" class="buttonfacebook" style=" background-image: url(images/facebook.png); ">'+
 '</div>'+

 '<div id="login" hidden=true>'+   
          '<h1>Welcome Back!</h1>'+
   '</div>'+
 '</div>'




 }); 

    });
    </script>


</body>
</html>

结果不错:

这个看起来不错但我有个小问题。开始时的活动部分是“铭文”,但是当我试图移到登录部分时,onclick事件似乎从第一次开始就没有响应。我必须在链接"LogIn“上点击两次才能工作。

我认为Onclick不是第一次响应,而是使用一个简单的警报消息来响应,但是更改没有应用.我必须点击两次而这只是第一次..。

更确切地说: 1)我点击显示对话框- Pop-in 2)我点击两次登录才能工作3)它可以正常工作,我可以从铭文转到登录,反之亦然。

问题是,为什么我要点击两次才能让它工作呢?

我还注意到,当我显示这个Pop,而不是单击active选项卡(默认情况下是“铭文”)时,问题就消失了,而且工作正常!似乎通过点击“铭文”,我改变了一些东西,但我无法弄清楚。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-14 13:59:08

使用这个。从代码中删除onClick属性。第一次和第二次单击发生了什么:

第一次单击是启用函数绑定,从第二次单击开始,事件处理程序就开始工作。

代码语言:javascript
复制
<script>
    $(document).on('click', '.tab a', function (ev) {
        ev.preventDefault();
        $(this).parent().addClass('active');
        $(this).parent().siblings().removeClass('active');

        target = $(this).attr('href');
        $('.tab-content > div').not(target).hide();
        $(target).fadeIn(600);

    });
</script>

<a href="#signup" id="inscriptionMenu" onclick="return myFunction()">Inscription</a>更改为<a href="#signup" id="inscriptionMenu">Inscription</a>

票数 1
EN

Stack Overflow用户

发布于 2015-08-14 14:02:18

不要将下面的代码放在函数中,而是在DOM就绪中。由于代码用于设置单击事件侦听器,所以当您将其放入函数中时,这意味着在该函数至少运行一次之前不会设置事件侦听器。另一个问题是,每次单击都会设置一个新的事件侦听器,并且单击处理程序的触发次数与以前的单击次数一样多。

代码语言:javascript
复制
$('.tab a').on('click', fn);

你的安排应该是这样的:

代码语言:javascript
复制
$(document).ready(function() {
    $('.tab a').on('click', fn);
    //other code
});

这样,一旦DOM准备就绪,事件侦听器就会被设置。如果在DOM就绪之后创建了任何a元素,那么使用以下版本:

代码语言:javascript
复制
$(document).ready(function() {
    //other code, including code adding a elements
    $('.tab a').on('click', fn);
});

或者:

代码语言:javascript
复制
$(document).ready(function() {
    $(document).on('click', '.tab a', fn);
    //other code, including code adding a elements
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32011867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档