IndexedDB 对象到 jQuery 自定义触发事件?

IndexedDB object to jQuery custom trigger event?

我正在研究 JS 中的 IndexedDB 功能 - 我想在成功回调时添加一些带有 IndexedDB 对象的自定义 jquery 触发事件,不确定是否可能但是当我测试事件触发时它不传递 IndexedDB 对象

            if ( !window.indexedDB ) {
                console.log( `Your browser not support IndexedDB` ) ;
                return ;
            }
            const request = indexedDB.open( 'pdr' , 1 ) ;
            request.onupgradeneeded = ( event ) => {
                let db = event.target.result ;
                let store = db.createObjectStore( 'CanvasObjects' , {
                    autoIncrement : true
                } ) ;
            } ;
            request.onerror = ( event ) => {
                console.error( `Database error: ${event.target.errorCode}` ) ;
            } ;

            request.onsuccess = ( event ) => {
                const db = event.target.result ;
                console.log(db);
                jQuery( document ).trigger( 'test_db_connected' , db ) ;

            } ;

之后,我使用以下代码

test_db_connected jquery 事件上执行函数
jQuery( document ).on( 'test_db_connected' , function ( db ) {
    console.log( 'testing_db' ) ;
    console.log( db ) ; 
    const txn = db.transaction( 'CanvasObjects' , 'readwrite' ) ; 
   } ) ;

但是上面的代码会产生错误

Uncaught TypeError: db.transaction is not a function

进一步检查我发现 request.onsuccess 上的对象 return 在 jQuery 自定义触发事件中是不同的。

是否有可能将 IndexedDB 对象传递给自定义 jquery 触发事件?

感谢您的回复。

您没有正确使用 jQuery 的事件方法。处理程序接受您发送的任何自定义数据的附加参数。所以你的处理程序应该是这样的:

jQuery(document).on('test_db_connected', function(ev, db) {
  console.log('testing_db');
  console.log(db);
  const txn = db.transaction('CanvasObjects', 'readwrite');
  console.log(txn);
});

此外,您确实应该使用 jQuery 的 Event 对象来构建和触发自定义事件。 docs 声明字符串事件类型参数将用于 DOM 级事件。但这仍然可以正常工作。

Working Solution