0

我试图在一些 Sencha 元素中从 JQuery 捕获 .keypress 事件,但似乎 Sencha 以某种方式将它们隐藏到 JQuery 中。

我将展示一段代码,它更简单,但有同样的问题:

        Ext.onReady(function(){

            $("#jquery").click(function() {
                alert('Handler for click called.');
            });

            var contextMenu = new Ext.menu.Menu({
                renderTo: document.body,
                width: 150,
                floating: false,
                plain: true,
                items: [{
                    text: 'button1',
                    id: 'jquery'
                },{
                    text: 'button2'
                }]
            });
        });
    </script>
</head>
<body>
<div id="test"> I am a div </div>
</body>

我的目标是,当我单击 button1 时,会显示警报弹出窗口,但不会发生。但是,如果我将 JQuery 代码更改为:

$("#test").click(function() {
alert('Handler for click called.');
});

然后我点击弹出的 div 内容,因此该库已正确加载。

我认为这一定与 Sencha 如何创建我检查过的 html 有关,我可以看到 button1 如下所示:

<a id="jquery" class="x-menu-item" hidefocus="true" unselectable="on" href="#"><img alt="" src="data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" class="x-menu-item-icon " id="ext-gen7"><span class="x-menu-item-text" id="ext-gen8">button1</span></a>

但是我仍然无法在我想要的地方使用 JQuery。使用 JQuery 选择器访问 sencha 元素的任何想法或解决方案?

4

1 回答 1

3

我不知道你为什么要在 jquery 中使用 ExtJS
尽量避免同时使用,因为这只会增加页面时间并且不会添加任何新功能
Extjs 本身是一个相当大的库,并且肯定支持 DOM 操作

你的代码问题是 Ext。 onReady() 事件在所有依赖项都已加载时触发。ExtJS 动态生成 HTML 元素,因此在引发此事件时,所有脚本都存在,但没有创建任何内容,因此没有 id 为 jquery 的元素,因此您无法通过 jquery 访问它,

我建议这样做是为了
*将这段 jquery 代码放在一些 afterrender 事件中,这样你就可以确定 HTML 元素存在
*如果你不能这样做,那么使用 jqueryliveOR jquery on,因为它们是可用于将事件处理程序分配给动态创建的元素的函数。
* 最推荐的方法是将ExtJS 样式的侦听器放入元素,Extjs 将为您处理事件的引发。像这样的东西

listeners: {
        click: {
            element: 'el', //bind to the underlying el property on the panel
            fn: function(){ console.log('click el'); }
        },
        dblclick: {
            element: 'body', //bind to the underlying body property on the panel
            fn: function(){ console.log('dblclick body'); }
        }
    }
于 2012-08-06T10:36:39.817 回答