【问题标题】:Trigger event by mouse click VS key shortcut鼠标点击触发事件VS快捷键
【发布时间】:2014-02-24 08:00:39
【问题描述】:

我有一个函数可以在点击链接时显示带有 JqGrid 的表单对话框。

我的代码是这样的:

HTML:

<div id="mainDialog">
    <a href='#' class='showList'>Show list [Ctrl+L]</a>
    ....
</div>

jquery:

$('#mainDialog .showList').click(function(){
    showDialog({
        formid:"The_List",          
        path:"folder/subfolder",            
        height:820,         
        open:function(){}
    }); 
});     

表单对话框The_List 来自另一个文件。在那个文件里面,我有这样的东西:

$("#dlgThe_List").bind('dialogopen',function(e){
    $("#listGrid").jqGrid({
        //set the grid properties
        ....
    });
});

使用它,它可以在显示对话框的地方正常工作,其中 JqGrid 表已被填充。


但是,当我使用下面的代码触发上面的click 函数时,会显示对话框但JqGrid甚至没有出现

$('#mainDialog').on('keydown', function(e){
    if (e.keyCode == 76 && e.ctrlKey){
        e.preventDefault();
        $('#mainDialog .showList').trigger('click');
    }
});

我的第一个想法是 showDialog 脚本在 jqGrid 创建之前完成。 但从逻辑上讲,我认为没有区别,因为使用快捷键时,点击功能仍然触发。

对此有任何澄清吗?

编辑: 我创建了与我的问题类似的JSFiddle demo,但不幸的是不支持 JqGrid。

【问题讨论】:

  • 即使$('#mainDialog #showList') 也应该是$('#mainDialog .showList')
  • 抱歉,打错字了。我的代码应该是$('#mainDialog .showList')

标签: javascript jquery html jqgrid


【解决方案1】:

我认为你也应该触发dialogopen 事件:

$('#mainDialog').on('keydown', function(e){
   if (e.keyCode == 76 && e.ctrlKey){
      e.preventDefault();
      $('#mainDialog .showList').trigger('click');
      $("#dlgThe_List").trigger('dialogopen'); //<-----trigger it too
   }
});

正如您提到的,有一个错字,但您必须将您的 id 更改为 class of:

$('#mainDialog .showList')

属于这个:

 <a href='#' class='showList'>Show list [Ctrl+L]</a>

我已经更新了你的小提琴并且它在这里工作得很好:

Check the Demo

它带有一些本地数据。

【讨论】:

  • 不走运。如上所述,两者都会打开对话框,但是使用Ctrl+L 键打开的对话框没有显示JqGrid,而使用鼠标单击时,Grid 就在那里。
  • 好的!你有没有参考你页面中的 jqGrid 依赖项。
  • 是的,当然。如果没有,jqGrid 将不会通过鼠标单击显示
  • 不错。现在 mouse clickctrl+L 都显示了网格。我相信这是因为对话框来自同一个文件。而我的实际情况是对话框形式保存在不同的文件中。看来我必须合并这两个文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
相关资源
最近更新 更多