简体   繁体   English

javascript onclick在重复本身

[英]javascript onclick is repeating itself

I have these two block of Javascript codes. 我有这两个Javascript代码块。 Essentially what I want to do is use the Enter button and the "next_layer" button for the same thing "go to the next task, and load the next figures", but once I Click, the program loops over itself forever, like if the "onclick" was always activated. 本质上,我想做的是使用Enter按钮和“ next_layer”按钮执行相同的操作“转到下一个任务,并加载下一个图形”,但是一旦单击,程序将永远循环遍历自己,就像“ onclick”始终处于激活状态。 As a solution, I temporarily used: 作为解决方案,我暂时使用:

this.bind('click');

but it only works for the first iteration. 但它仅适用于第一次迭代。 How do I 'unbind/reset' this so it works for the next iterations as well? 我如何“取消绑定/重置”,以便它也可以用于下一个迭代? Or is there another more elegant solution that doesn't require me to use the 'bind() or unbind() commands? 还是有另一个更优雅的解决方案,不需要我使用'bind()或unbind()命令?

Code blocks: 代码块:

$('.next_layer').click(function(){
var id=this.id;
var validate=validateForm(id);
if(validate){

var idns=parseInt(id)+1;
var idcath="layer"+id;
var idcats="layer"+idns;
if(idns==20)$('#submitButton').css("display","block");

$('#'+idcath).css("visibility", "hidden");
$('#'+idcats).css("visibility", "visible");

$("html, body").animate({ scrollTop: 0 }, "slow");
}

//kinda works!
//this.bind('click');
return false;
});

and: 和:

$(document).keypress(function(event){
    //var stop1 = 0;
    var keycode = (event.keyCode ? event.keyCode : event.which);
        if(keycode == '13'){
        $('.next_layer').click();
        }
});

[EDIT]: My problem is very similar to this thread: JQuery Event repeating in dynamic content [编辑]:我的问题与此线程非常相似: 动态内容中重复的JQuery事件

Here is the complete HTML code: 这是完整的HTML代码:

<div id="layer1" class="layers">
<table cellspacing="4" cellpadding="0">
    <tbody>
        <tr>
            <td><center>Image A</center></td>
            <td><center>Image B</center></td>
        </tr>
        <tr>
            <td><img width="360" height="360" src="${image_url1a1}" style="margin-right: 75px; margin-left: 75px;" alt="image1_11" /></td>
            <td><img width="360" height="360" src="${image_url1b1}" style="margin-right: 75px; margin-left: 75px;" alt="image2_11" /></td>
        </tr>
        <tr>
            <td colspan="2"><center>             <label style="font-size: 16px;">Which of these images will go Viral? Image A or Image B?</label>       </center></td>
        </tr>
        <tr>
            <td><center><input type="radio" value="ImageA" name="share1_11" /><label style="font-size: 16px;">Image A</label></center></td>
            <td><center><input type="radio" value="ImageB" name="share1_11" /><label style="font-size: 16px;">Image B</label></center></td>
        </tr>
    </tbody>
</table>
<hr />
<p>[Optional] Enter any comments here:</p>
<p><textarea name="summary1" cols="80" rows="3"></textarea></p>
<p><style type="text/css">
<!--
.highlight-box { border:solid 0px #98BE10; background:#FCF9CE; color:#222222; padding:4px; text-align:left; font-size: smaller;}
-->
</style></p>
<div class="next_layer" id=1 >Next</div>
</div>

<div id="layer2" class="layers">
<table cellspacing="4" cellpadding="0">
    <tbody>
        <tr>
            <td><center>Image A</center></td>
            <td><center>Image B</center></td>
        </tr>
        <tr>
            <td><img width="360" height="360" src="${image_url1a2}" style="margin-right: 75px; margin-left: 75px;" alt="image1_12" /></td>
            <td><img width="360" height="360" src="${image_url1b2}" style="margin-right: 75px; margin-left: 75px;" alt="image2_12" /></td>
        </tr>
        <tr>
            <td colspan="2"><center>             <label style="font-size: 16px;">Which of these images will go Viral? Image A or Image B?</label>       </center></td>
        </tr>
        <tr>
            <td><center><input type="radio" value="ImageA" name="share1_12" /><label style="font-size: 16px;">Image A</label></center></td>
            <td><center><input type="radio" value="ImageB" name="share1_12" /><label style="font-size: 16px;">Image B</label></center></td>
        </tr>
    </tbody>
</table>
<hr />
<p>[Optional] Enter any comments here:</p>
<p><textarea name="summary2" cols="80" rows="3"></textarea></p>
<p><style type="text/css">
<!--
.highlight-box { border:solid 0px #98BE10; background:#FCF9CE; color:#222222; padding:4px; text-align:left; font-size: smaller;}
-->
</style></p>
<div class="next_layer" id=2 >Next</div>
</div>

<div id="layer3" class="layers">
<table cellspacing="4" cellpadding="0">
    <tbody>
        <tr>
            <td><center>Image A</center></td>
            <td><center>Image B</center></td>
        </tr>
        <tr>
            <td><img width="360" height="360" src="${image_url1a3}" style="margin-right: 75px; margin-left: 75px;" alt="image1_13" /></td>
            <td><img width="360" height="360" src="${image_url1b3}" style="margin-right: 75px; margin-left: 75px;" alt="image2_13" /></td>
        </tr>
        <tr>
            <td colspan="2"><center>             <label style="font-size: 16px;">Which of these images will go Viral? Image A or Image B?</label>       </center></td>
        </tr>
        <tr>
            <td><center><input type="radio" value="ImageA" name="share1_13" /><label style="font-size: 16px;">Image A</label></center></td>
            <td><center><input type="radio" value="ImageB" name="share1_13" /><label style="font-size: 16px;">Image B</label></center></td>
        </tr>
    </tbody>
</table>
<hr />
<p>[Optional] Enter any comments here:</p>
<p><textarea name="summary3" cols="80" rows="3"></textarea></p>
<p><style type="text/css">
<!--
.highlight-box { border:solid 0px #98BE10; background:#FCF9CE; color:#222222; padding:4px; text-align:left; font-size: smaller;}
-->
</style></p>
<div class="next_layer" id=3 >Next</div>
</div>

<div id="layer4" class="layers">
<table cellspacing="4" cellpadding="0">
    <tbody>
        <tr>
            <td><center>Image A</center></td>
            <td><center>Image B</center></td>
        </tr>
        <tr>
            <td><img width="360" height="360" src="${image_url1a4}" style="margin-right: 75px; margin-left: 75px;" alt="image1_14" /></td>
            <td><img width="360" height="360" src="${image_url1b4}" style="margin-right: 75px; margin-left: 75px;" alt="image2_14" /></td>
        </tr>
        <tr>
            <td colspan="2"><center>             <label style="font-size: 16px;">Which of these images will go Viral? Image A or Image B?</label>       </center></td>
        </tr>
        <tr>
            <td><center><input type="radio" value="ImageA" name="share1_14" /><label style="font-size: 16px;">Image A</label></center></td>
            <td><center><input type="radio" value="ImageB" name="share1_14" /><label style="font-size: 16px;">Image B</label></center></td>
        </tr>
        <tr>
            <td><center><label style="font-size: 16px;"><b>Did Image A surprise you?</b></label>        
<input type="radio" value="Yes1a" name="seen1a_14" /><label style="font-size: 16px;">Yes</label>                
<input type="radio" value="No1a" name="seen1a_14" /><label style="font-size: 16px;">No </label></center></td>
            <td><center><label style="font-size: 16px;"><b>Did Image B surprise you?</b></label>        
<input type="radio" value="Yes1b" name="seen1b_14" /><label style="font-size: 16px;">Yes</label>                
<input type="radio" value="No1b" name="seen1b_14" /><label style="font-size: 16px;">No</label></center></td>
        </tr>
    </tbody>
</table>
<hr />
<p>[Optional] Enter any comments here:</p>
<p><textarea name="summary4" cols="80" rows="3"></textarea></p>
<p><style type="text/css">
<!--
.highlight-box { border:solid 0px #98BE10; background:#FCF9CE; color:#222222; padding:4px; text-align:left; font-size: smaller;}
-->
</style></p>
<div class="next_layer" id=4 >Next</div>
</div>

<!----- 2nd pair----->
These pairs are analogously the same as the 1st and 5th. They were cut off due to spacing restrictions.
<!----- 3rd pair----->

<!----- 4th pair----->

<!----- 5th pair----->

<div id="layer17" class="layers">
<table cellspacing="4" cellpadding="0">
    <tbody>
        <tr>
            <td><center>Image A</center></td>
            <td><center>Image B</center></td>
        </tr>
        <tr>
            <td><img width="360" height="360" src="${image_url5a1}" style="margin-right: 75px; margin-left: 75px;" alt="image9_27" /></td>
            <td><img width="360" height="360" src="${image_url5b1}" style="margin-right: 75px; margin-left: 75px;" alt="image10_27" /></td>
        </tr>
        <tr>
            <td colspan="2"><center>             <label style="font-size: 16px;">Which of these images will go Viral? Image A or Image B?</label>       </center></td>
        </tr>
        <tr>
            <td><center><input type="radio" value="ImageA" name="share5_27" /><label style="font-size: 16px;">Image A</label></center></td>
            <td><center><input type="radio" value="ImageB" name="share5_27" /><label style="font-size: 16px;">Image B</label></center></td>
        </tr>
    </tbody>
</table>
<hr />
<p>[Optional] Enter any comments here:</p>
<p><textarea name="summary17" cols="80" rows="3"></textarea></p>
<p><style type="text/css">
<!--
.highlight-box { border:solid 0px #98BE10; background:#FCF9CE; color:#222222; padding:4px; text-align:left; font-size: smaller;}
-->
</style></p>
<div class="next_layer" id=17 >Next</div>
</div>


<div id="layer18" class="layers">
<table cellspacing="4" cellpadding="0">
    <tbody>
        <tr>
            <td><center>Image A</center></td>
            <td><center>Image B</center></td>
        </tr>
        <tr>
            <td><img width="360" height="360" src="${image_url5a2}" style="margin-right: 75px; margin-left: 75px;" alt="image9_28" /></td>
            <td><img width="360" height="360" src="${image_url5b2}" style="margin-right: 75px; margin-left: 75px;" alt="image10_28" /></td>
        </tr>
        <tr>
            <td colspan="2"><center>             <label style="font-size: 16px;">Which of these images will go Viral? Image A or Image B?</label>       </center></td>
        </tr>
        <tr>
            <td><center><input type="radio" value="ImageA" name="share5_28" /><label style="font-size: 16px;">Image A</label></center></td>
            <td><center><input type="radio" value="ImageB" name="share5_28" /><label style="font-size: 16px;">Image B</label></center></td>
        </tr>
    </tbody>
</table>
<hr />
<p>[Optional] Enter any comments here:</p>
<p><textarea name="summary18" cols="80" rows="3"></textarea></p>
<p><style type="text/css">
<!--
.highlight-box { border:solid 0px #98BE10; background:#FCF9CE; color:#222222; padding:4px; text-align:left; font-size: smaller;}
-->
</style></p>
<div class="next_layer" id=18 >Next</div>
</div>

<div id="layer19" class="layers">
<table cellspacing="4" cellpadding="0">
    <tbody>
        <tr>
            <td><center>Image A</center></td>
            <td><center>Image B</center></td>
        </tr>
        <tr>
            <td><img width="360" height="360" src="${image_url5a3}" style="margin-right: 75px; margin-left: 75px;" alt="image9_29" /></td>
            <td><img width="360" height="360" src="${image_url5b3}" style="margin-right: 75px; margin-left: 75px;" alt="image10_29" /></td>
        </tr>
        <tr>
            <td colspan="2"><center>             <label style="font-size: 16px;">Which of these images will go Viral? Image A or Image B?</label>       </center></td>
        </tr>
        <tr>
            <td><center><input type="radio" value="ImageA" name="share5_29" /><label style="font-size: 16px;">Image A</label></center></td>
            <td><center><input type="radio" value="ImageB" name="share5_29" /><label style="font-size: 16px;">Image B</label></center></td>
        </tr>
    </tbody>
</table>
<hr />
<p>[Optional] Enter any comments here:</p>
<p><textarea name="summary19" cols="80" rows="3"></textarea></p>
<p><style type="text/css">
<!--
.highlight-box { border:solid 0px #98BE10; background:#FCF9CE; color:#222222; padding:4px; text-align:left; font-size: smaller;}
-->
</style></p>
<div class="next_layer" id=19 >Next</div>
</div>

<div id="layer20" class="layers">
<table cellspacing="4" cellpadding="0">
    <tbody>
        <tr>
            <td><center>Image A</center></td>
            <td><center>Image B</center></td>
        </tr>
        <tr>
            <td><img width="360" height="360" src="${image_url5a4}" style="margin-right: 75px; margin-left: 75px;" alt="image9_30" /></td>
            <td><img width="360" height="360" src="${image_url5b4}" style="margin-right: 75px; margin-left: 75px;" alt="image10_30" /></td>
        </tr>
        <tr>
            <td colspan="2"><center>             <label style="font-size: 16px;">Which of these images will go Viral? Image A or Image B?</label>       </center></td>
        </tr>
        <tr>
            <td><center><input type="radio" value="ImageA" name="share5_30" /><label style="font-size: 16px;">Image A</label></center></td>
            <td><center><input type="radio" value="ImageB" name="share5_30" /><label style="font-size: 16px;">Image B</label></center></td>
        </tr>
        <tr>
            <td><center><label style="font-size: 16px;"><b>Did Image A surprise you?</b></label>        
<input type="radio" value="Yes5a" name="seen5a_30" /><label style="font-size: 16px;">Yes</label>                
<input type="radio" value="No5a" name="seen5a_30" /><label style="font-size: 16px;">No </label></center></td>
            <td><center><label style="font-size: 16px;"><b>Did Image B surprise you?</b></label>        
<input type="radio" value="Yes5b" name="seen5b_30" /><label style="font-size: 16px;">Yes</label>                
<input type="radio" value="No5b" name="seen5b_30" /><label style="font-size: 16px;">No</label></center></td>
        </tr>
    </tbody>
</table>
<hr />
<p>[Optional] Enter any comments here:</p>
<p><textarea name="summary20" cols="80" rows="3"></textarea></p>
<p><style type="text/css">
<!--
.highlight-box { border:solid 0px #98BE10; background:#FCF9CE; color:#222222; padding:4px; text-align:left; font-size: smaller;}
-->
</style></p>
<!--<div class="next_layer" id=4 >Next</div>-->
</div>

Here is the complete javascript code: 这是完整的javascript代码:

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> <script>

window.onload = function() {document.getElementById('submitButton').setAttribute('onclick', 'return validateForm(20)');$('#submitButton').css("display","none");$('#submitButton').css("position","absolute");$('#submitButton').css("top","860px");}


$('#layer1').css("visibility", "visible");

$('.next_layer').click(function(){
var id=this.id;
var validate=validateForm(id);
if(validate){

var idns=parseInt(id)+1;
var idcath="layer"+id;
var idcats="layer"+idns;
if(idns==20)$('#submitButton').css("display","block");

$('#'+idcath).css("visibility", "hidden");
$('#'+idcats).css("visibility", "visible");

//alert("trycatch");
$("html, body").animate({ scrollTop: 0 }, "slow");
}
//this.unbind('click')
//else alert("nonval");

//kinda works!
//this.bind('click');
//this.rebind('click');
//return false;
});

$('.next_layer').keyup(function(){
var id=this.id;
var validate=validateForm(id);
if(validate){

var idns=parseInt(id)+1;
var idcath="layer"+id;
var idcats="layer"+idns;
if(idns==20)$('#submitButton').css("display","block");

$('#'+idcath).css("visibility", "hidden");
$('#'+idcats).css("visibility", "visible");

//alert("trycatch");
$("html, body").animate({ scrollTop: 0 }, "slow");
}
//this.unbind('click')
//else alert("nonval");

//kinda works!
this.bind('keyup');
//this.rebind('click');
return false;
});


function validateForm(id) {
 var empty = false;
    $(':radio').each(function() {
        nam = $(this).attr('name');
nam_last=nam.substr(nam.length-2);
if(parseInt(nam_last)==parseInt(id)+10){
        if (!$(':radio[name="'+nam+'"]:checked').length) { 

           empty = true;
        }
}
    });


if (!empty)
return true;
else{
alert("Please answer all the questions!");
return false;
}
}

$(document).keypress(function(event){
    //var stop1 = 0;
    var keycode = (event.keyCode ? event.keyCode : event.which);
        if(keycode == '13'){
        $('.next_layer').keyup();
        }
});

//$(document).unbind("click", event);

//$('#foo').bind('click', handler);
//$('#foo').unbind('click', handler);

</script>

You do not actually have an infinite loop. 您实际上没有无限循环。 What is happening is that the selector $('.next_layer') is selecting all elements with the next_layer class, regardless of visibility, so your line 发生的事情是选择器$('.next_layer')选择具有next_layer类的所有元素,而不考虑可见性,因此您的行

$('.next_layer').click();

effectively clicks them all at once. 一次有效地点击它们。

A suggestion to do this differently: 一个不同的建议:
Instead of explicitly changing visiblity on each element, define a couple of CSS classes like hidden and visible that contain the appropriate options. 无需显式更改每个元素的可见性,而是定义几个包含适当选项的CSS类(例如hidden和visible)。 Use removeClass and addClass to change to the next element 使用removeClassaddClass更改到下一个元素

$('#'+idcath).removeClass('visible').addClass('hidden');
$('#'+idcats).removeClass('hidden').addClass('visible');

Then you could use 那你可以用

$('.next_layer.visible').click();

so you only click the one that is visible. 因此,您只需单击可见的那个。

jsFiddle Example jsFiddle示例

If for some reason you can't use CSS, you could set an attribute on the elements: 如果由于某种原因您不能使用CSS,则可以在元素上设置一个属性:

$('#'+idcath).css("visibility", "hidden").attr('active','false');
$('#'+idcats).css("visibility", "visible").attr('active','true');

and to click just the active one, your keypress handler would use: 并仅点击活动按钮,您的按键处理程序将使用:

$('.next_layer[active="true"]').click();

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

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