jQuery.event.props non è definito

Sto usando jquery.event.move per creare eventi di spostamento su dispositivi touch. Lo script genera un errore sulla linea 580.

570 // Make jQuery copy touch event properties over to the jQuery event 571 // object, if they are not already listed. But only do the ones we 572 // really need. IE7/8 do not have Array#indexOf(), but nor do they 573 // have touch events, so let's assume we can ignore them. 574 if (typeof Array.prototype.indexOf === 'function') { 575 (function(jQuery, undefined){ 576 var props = ["changedTouches", "targetTouches"], 577 l = props.length; 578 579 while (l--) { 580 if (jQuery.event.props.indexOf(props[l]) === -1) { 581 jQuery.event.props.push(props[l]); 582 } 583 } 584 })(jQuery); 585 }; 

Quando arriva alla riga 580 genera Uncaught TypeError: Cannot read property 'indexOf' of undefined Il modo in cui ho capito è che jQuery.event.props non è definito? Non dovrebbe questo array essere presente di default in jQuery? Ho “installato” jQuery nella mia app per rails come un gioiello (jquery-rails 4.1.1) Qualche idea su cosa potrei fare?

C’è un problema con jquery versione 3 o successiva come menzionato nella pagina di rilascio del github jquery.event.move :

jQuery 3.0.0 interrompe jQuery.event.props utilizzo di jQuery.event.props

Ciò è accaduto poiché nell’aggiornamento jQuery 3.0.0 jQuery.event.props e jQuery.event.fixHooks sono stati rimossi. Maggiori dettagli qui:

Ultime modifiche: jQuery.event.props e jQuery.event.fixHooks rimosse

Le prestazioni di gestione degli eventi di jQuery sono aumentate grazie a una riorganizzazione della gestione delle proprietà degli eventi. Il miglioramento principale è che jQuery ora calcola o copia solo una proprietà al primo accesso, invece di calcolarli e copiarli in anticipo. Questa è una vittoria davvero grande con proprietà che possono forzare il layout che il gestore eventi potrebbe non aver nemmeno bisogno. L’uso più comune di cui siamo a conoscenza è stato l’aggiunta di proprietà per gli eventi puntatore, che non è più necessario poiché tali eventi sono già supportati in jQuery 3.0. Il plugin jQuery Migrate fornisce supporto per queste proprietà se ne hai ancora bisogno. Anche gli elenchi mouseHooks e keyHooks relativi ma non documentati sono stati rimossi. Il team è interessato a comprendere altri casi d’uso prima di definire nuove API, quindi sentiti libero di aprire un ticket.

Il problema del github è ancora aperto e non è stata ancora fornita alcuna soluzione dall’8.01.2016. Come soluzione alternativa puoi:

  • Usa il plugin jQuery Migrate, che fornisce supporto per queste proprietà.
  • Oppure, utilizza qualsiasi versione di jQuery sotto 3.0.0