2016-03-24 12 views
5

ho un tasto che voglio collegare un ascoltatore click, ma ogni volta che il codice viene eseguito, si genera un errore consolejQuery onclick errore di registrazione

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

Ecco il codice js che innesca l'errore, la prima linea funziona bene, la seconda linea è quella che causa l'errore

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

quello che mi confonde, se corro quel po 'di codice manualmente tramite la console, ottengo nessun errore

Ecco il codice 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

Se si vuole aiutare il debug si dovrebbe fornire abbastanza codice per qualcun altro per eseguire facilmente. Fare un jsfiddle è un buon modo per andare ... –

+3

Possibile duplicato di [Uncaught TypeError: ((x.event.special \ [i.origType \] || (valore intermedio)). Handle || i.handler). apply non è una funzione] (http://stackoverflow.com/questions/32231036/uncaught-typeerror-x-event-speciali-origtype-intermediate-value-handl) –

risposta

6

ho trovato il problema, qui di seguito i miei ascoltatori, c'è un ascoltatore estraneo che ho attaccato

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

Il problema qui è che Views.Editor.close è il nome del metodo errato. Quando ho cambiato il nome del metodo, l'errore scompare

Non mi rendevo conto che un ascoltatore estraneo può influenzare gli altri

+0

Si è imbattuto in questo stesso problema in Internet Explorer 11. Si scopre che c'era un listener di eventi non valido che mi sembra di aver trascurato o dimenticato: '.on (" click ",". ")'. In effetti sembra che anche solo un ascoltatore non valido può rompere la funzionalità degli altri, almeno se l'esecuzione dello script è impostata su ogni eccezione. Nota che questo errore si verifica anche con lo sviluppo/versione completa di jQuery. – Tacticus

0

Ah. sembra che tu possa avere i tuoi parametri JQuery errati se ho capito la domanda/cosa stai cercando di fare.

eventi DOM dovrebbero essere aggiunti agli argomenti

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

non funziona, ho provato tutti e 3 tipi di assegnazione dei clic che conosco, $ btn.click (func), $ btn.on ('click', func), e $ toolbar.on ('click', '#btn', func); – iceman2992

+0

avviso il mio html ha cambiato –

0

Prova questo: 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, per qualche motivo non sembra funzionare quando lo provo su jsfiddle – iceman2992

+0

Riprovare per favore. –

+0

Probabilmente il codice è legacy e non si vuole approfondirlo, ma non vedo troppo senso disattivare un'azione in una riga e attivarla nella riga successiva ... Vorrei rimuovere la riga dove impostare il pulsante spento – cralfaro

0

Da quello che vedo in jQuery I documenti API per la loro funzione .off() & nell'esempio di codice sopra riportato, sembra che la funzione non venga passata come terzo parametro alla funzione .off(). Quindi è possibile che la libreria jQuery si stia lamentando di non riuscire a trovare una funzione per rimuoverla.

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

Prova questa & vedere se aiuta:

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

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

L'ho appena provato, purtroppo non funziona. Ho persino provato a commentare il comando .off(), ed è sempre lo stesso risultato – iceman2992

+0

Il codice gira OK su questo jsfiddle con v. 2.2.1: https://jsfiddle.net/briankueck/75ucysvx/ – Clomp

+0

Quando guardi questo link: http://code.jquery.com/jquery-2.2.1.js Ho trovato il codice sulla linea 4731-2. Potrebbe essere necessario mettere un debugger prima di quelle righe - nel file jquery.js di localhost - per vedere quali valori appaiono in questa riga di codice: "ret = ((jQuery.event.special [handleObj.origType] || {}) .handle || handleObj.handler) .apply (matched.elem, args); " – Clomp