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 级事件。但这仍然可以正常工作。
我正在研究 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 级事件。但这仍然可以正常工作。