jQuery单击事件触发器不止一次

时间:2014-03-12 15:57:06

标签: jquery click

我正在做一个包含用户必须填写的简单表单的项目,然后是一个提交它的按钮。 第一次单击按钮时,事件(由.click()调用)正确发生,但第二次事件发生两次,依此类推..如果我提交了100次表单,它将播放事件100次

function MenuOpinion(){
$("#registraropinion").click(IngresarOpinion);
}

function IngresarOpinion(){ 
var seleccionada= $("#perpelicula option:selected").html();
if(seleccionada=="Seleccione"){
    $("#error_opinion").html("Seleccione una película de la lista");
}else{
    $("#error_opinion").html("");
    var nuevaOpinion=[];
    nuevaOpinion['nombre']=$("#pernombre").val();
    nuevaOpinion['edad']=$("#peredad").val();
    nuevaOpinion['opinion']=$("#peropinion").val();
    nuevaOpinion['puntaje']= parseInt($("#puntaje option:selected").html());
    nuevaOpinion['aclaracion']=$("#txtaclaracion").val();
    for(var i=0; i<listaPeliculas.length; i++){
        if(listaPeliculas[i]['titulo']==seleccionada){
            listaPeliculas[i]['opiniones'].push(nuevaOpinion);
        }
    }
    /*Aviso al usuario y vuelvo al inicio*/
    alert("Opinión guardada");
    $("#opinion").hide();
    $("#inicio").show();
}
}

我真的找不到问题。我留下了与此按钮有关的代码。

1 个答案:

答案 0 :(得分:1)

更改

function MenuOpinion(){
$("#registraropinion").click(IngresarOpinion);
}

$(function(){ // <-- on document ready
   $("#registraropinion").click(IngresarOpinion); // <-- bind the click event once on dom ready
}}

我的猜测是你在每次提交时运行MenuOpinion() - 导致它将另一个点击处理程序绑定到你的元素 - 所以第100次点击将触发绑定到你的元素的所有100个点击事件处理程序

如果您使用的是表单和提交按钮,那么您应该使用

$(function(){ //<-- on document ready
   $(yourform).submit(IngresarOpinion); // <-- bind the click event
}}

然后在函数

中有一个e.preventDefault
function IngresarOpinion(e){
     e.preventDefault();
     // rest of your code
}