2014-03-12 126 views
0

我正在做一個包含用戶必須填寫的簡單表單的項目,然後提交一個按鈕。 第一次點擊按鈕時,事件(由.click()調用)正確發生,但第二次事件發生兩次,等等。如果我已經提交了我的表單100次,它將播放事件100倍。jQuery點擊事件觸發不止一次

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(); 
} 
} 

我真的找不到問題。我留下了與這個按鈕有關的代碼。

+2

我假設你打電話'次MenuOpinion' X號這反過來又增加了X點擊事件處理'#registraropinion' – kei

+0

內的e.preventDefault你可以設置一個JSFiddle(http://jsfiddle.net/)?這樣我們可以看到出了什麼問題。 –

+0

我只點擊一次,但在此之前我已經做了X次動作。 – daisymoon

回答

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 
}} 

則具備的功能

function IngresarOpinion(e){ 
    e.preventDefault(); 
    // rest of your code 
} 
+0

謝謝,這工作得很好 – daisymoon