2016-03-16 3 views
1

Я использую следующий кодфункция выполняется дважды после галочки

$("#cc1").unbind('click').click(function(e) { 
    //somefunction 
}); 

для того, чтобы выполнить функцию после того, как кнопка нажата cc1. С этим кодом все отлично работает.

Когда я использую ниже код

$("#cc1").unbind('click').click(function(e) { 

    if($('#cc').is(':checked')){ 

    } 

    //somefunction 
}); 

для того, чтобы выполнить ту же функцию, что и выше, но когда куб.см флажок и нажатия кнопки оплатить функции выполняется более чем один раз, и я получаю ошибки в дб ...

В чем проблема?

При нажатии кнопки оплаты приложение передает некоторые вары функции для обновления - импорт данных в базу данных. Если cc проверено, приложение передает разные данные. На приведенной выше странице содержится кнопка (оплата), которая при нажатии на платеж производится наличными. Если cc проверяется, оплата производится с помощью кредитной карты.

+0

проверить это: 'e.stopImmediatePropagation();' [event.stopImmediatePropagation()] (https://api.jquery.com/event.stopimmediatepropagation/) –

+2

Не могли бы вы попытаться предоставить фрагмент, который мы можем выполнить для воспроизводите свою проблему? –

+0

Если кнопка '# pay' кнопка отправки? – Gasim

ответ

0

По вашему описанию, может быть следующий код может помочь вам:

<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
</head> 
<body> 
    <div> 
     <form id="form"> 
     <input type="button" name="cc1" value="cc1" id="cc1">  
     <input type="button" name="pay" value="pay" id="pay">  
     <input type="checkbox" name="cc" id="cc">  
     </form> 
<script> 

$("#cc1").unbind('click').click(function(e) { 
     //somefunction 
    alert("test cc1"); 
    }); 

$("#pay").unbind('click').click(function(e) { 
    if($('#cc').is(':checked')){ 
     //somefunction 
     alert("credit"); 
    } 
    else{ 
     //anotherfunction 
     alert("cash"); 
    } 
    }); 
</script> 
</body> 
0

Эта проблема будет выглядеть, если у вас есть динамический слушатель связываясь & это условие происходит. Это вызовет два щелчка, так как у 2-го слушателя нет развязки на нем. Эти клики стекаются.

HTML:

<input type="checkbox" id="cc1"> Double Click<br> 
<input type="checkbox" id="cc2"> Single Click 

JS: jsfiddle

// Static Listener 
$("#cc1").unbind('click').click(function(e) { 
    checkClicked($(this)); 
}); 
$("#cc2").unbind('click').click(function(e) { 
    checkClicked($(this)); 
}); 

/* Dynamic Listener - Typically happens when Ajax data is being loaded, 
* DOM nodes are being added & listeners are being re-attached to the 
* new form fields: 
*/ 
$("#cc1").click(function(e) { // .unbind('click') 
    checkClicked($(this)); 
}); 
$("#cc2").unbind('click').click(function(e) { 
    checkClicked($(this)); 
}); 

function checkClicked(chkBx) { 
    console.log('clicked'); 
    if(chkBx.prop('checked')){ 
    console.log('isChecked: yes'); 
    } else { 
    console.log('isChecked: no'); 
    } 
} 

Поэтому убедитесь, что ваш код не имеет некорректные динамических слушателей привязываясь к нему. Если .nbind ('click') добавляется во второй динамический прослушиватель, тогда он будет иметь только действие 1 клик.

О, btw: .is (': checked') не работает в jQuery. Вам нужно будет использовать .prop ('checked'), чтобы установить флажок true/false.

Смежные вопросы