2016-03-24 15 views
5

Mam przycisk, który chcę dołączyć kliknij słuchacza, ale za każdym razem uruchamia kod, to rzuca konsoli błędówjQuery onclick błąd rejestracji

jquery.js:4435 Uncaught TypeError: ((n.event.special[g.origType] || (intermediate value)).handle || g.handler).apply is not a function

Oto kod JS, który wyzwala błąd, pierwsza linia działa poprawnie, druga linia to taka, która powoduje błąd

$toolbar.off('click', '.btn-save'); // $toolbar is assigned $("#toolbar") on init   
$toolbar.on('click', '.btn-save', function(e){ 
    saveData(0); 
}); 

Co mnie dezorientuje to, że jeśli uruchomię ten kawałek kodu ręcznie za pomocą konsoli, otrzymuję żadnych błędów

Oto HTML

<div class="row" id="toolbar"> 
<div class="col-lg-12"> 
    <button type="button" class="btn btn-primary btn-save">Save</button> 
    <button type="button" id="btnCancel" class="btn btn-default btn-cancel">Cancel</button> 
</div> 
</div> 
+2

Jeśli chcesz pomóc debugowania należy dostarczyć wystarczającą ilość kodu na kogoś innego, aby uruchomić łatwo. Tworzenie jsfiddle to dobry sposób na ... –

+3

Możliwy duplikat [Uncaught TypeError: ((x.event.special \ [i.origType \] || (wartość pośrednia)). Handle || i.handler). zastosowanie nie jest funkcją] (http://stackoverflow.com/questions/32231036/uncaught-typeerror-x-event-speciali-origtype-intermediate-value-handl) –

Odpowiedz

6

znalazłem problem, poniżej moich słuchaczy, nie ma żadnego związku słuchacz że dołączony

$(document).on("click", "#btn-back", Views.Editor.close);

Problem polega na tym, że Views.Editor.close jest nieprawidłową nazwą metody. Kiedy zmienił nazwę metody, błąd znika

nie zdawałem sobie sprawy, że niezwiązane słuchacz może wpływać na innych

+0

Natknąłem się na ten sam problem w Internet Explorerze 11. Okazuje się, że istniał niepoprawny detektor zdarzeń, który, jak się wydaje, przeoczył lub zapomniał: '.on (" click ",". ")'. Rzeczywiście wydaje się, że nawet tylko jeden nieprawidłowy słuchacz może przerwać działanie innych, przynajmniej jeśli wykonanie skryptu jest zatrzymane przy każdym wyjątku. Uwaga: ten błąd występuje również w wersji deweloperskiej/pełnej wersji jQuery. – Tacticus

0

ah. wygląda na to, że możesz mieć błędne parametry JQuery, jeśli zrozumiałem pytanie/co próbujesz zrobić.

zdarzenia DOM powinny być dołączone do elementów na

HTML:

<div class="row"> 
<div class="col-lg-12"> 
    <button id="save-btn-id" type="button" class="btn btn-primary btn-save">Save</button> 
    <button type="button" id="btnCancel" class="btn btn-default btn-cancel">Cancel</button> 
</div> 
</div> 

JS:

$(document).ready(function() { 
    $('#save-btn-id').click(function(evt) { 
    saveData(0); 
    }); 
}); 
+0

też nie działa, próbowałem wszystkich 3 typy przydziałów, które znam, $ btn.click (func), $ btn.on ("klik", func) i $ toolbar.on ("kliknij", "#btn", func); – iceman2992

+0

zauważ, że mój html zmienił się –

0

Spróbuj tego: https://jsfiddle.net/jorge182/a1y9abcj/2/

toolbar = $("#toolbar") 


$(toolbar).off('click', '.btn-save'); // $toolbar is assigned $("#toolbar") on init   
$(toolbar).on('click', '.btn-save', function(e){ 
    saveData(); 
}); 


function saveData(){ 
    alert(); 
} 
+0

hmm, z jakiegoś powodu nie działa, gdy próbuję go na jsfiddle – iceman2992

+0

Spróbuj ponownie. –

+0

Prawdopodobnie jest to dziedzictwo kodu, a nie chcesz go bardzo głęboko zagłębiać, ale nie widzę zbyt wiele sensu w dezaktywacji jednej akcji w jednej linii i aktywacji w następnej linii ... Usunąłbym wiersz, w którym ustawiono przycisk wyłączony – cralfaro

0

Z tego co widzę na jQuery Dokumenty API dla funkcji .off() & w powyższym przykładzie kodu, wygląda na to, że funkcja nie jest przekazywana jako trzeci parametr do funkcji .off(). Jest więc możliwe, że biblioteka jQuery narzeka, że ​​nie może znaleźć funkcji do jej usunięcia.

Patrz: http://api.jquery.com/off/

Spróbuj & zobaczyć czy to pomaga:

function clickListener(e){ 
    saveData(0); 
}; 

$toolbar.off('click', '.btn-save', clickListener); 
$toolbar.on('click', '.btn-save', clickListener); 
+0

Próbowałem tego, niestety to nie działa. Próbowałem nawet komentować komendę .off() i nadal jest to ten sam wynik. – iceman2992

+0

Kod działa poprawnie w tym jsfiddle z v. 2.2.1: https://jsfiddle.net/briankueck/75ucysvx/ – Clomp

+0

Patrząc na to link: http://code.jquery.com/jquery-2.2.1.js Znalazłem kod na linii 4731-2. Być może będziesz musiał umieścić debugger przed tymi liniami - w pliku localhost jquery.js - aby zobaczyć, jakie wartości pojawiają się w tym wierszu kodu: "ret = ((jQuery.event.special [handleObj.origType] || {}) .handle || handleObj.handler) .apply (dopasowany.elem, args); " – Clomp