jQuery的:在用户界面对话框禁用点击功能

问题描述:

$(top.document).ready(function() { 

    $("*").click(processAction); 



function processAction(e){ 
    var clicked = e.target; 
    e.stopPropagation(); 
    alert(clicked.tagName); 
    e.stopPropagation(); 

    switch(clicked.tagName) 
    { 
     case "A": 
      newDialog("You've clicked on a link !", "Please Choose An Action <br> 1<br>3");   
      return false; // prevent the default action, e.g., following a link 
     break; 

     case "INPUT": 
      newDialog("You've clicked on a form !", "Please Choose An Action <br> 1<br>3");   
      return false; 
     break; 

     case "IMG": 
      newDialog("You've clicked on a picture !", "Please Choose An Action <br> 1<br>3");   
      return false; 
     break; 

     case "BUTTON": 
      newDialog("You've clicked on a button !", "Please Choose An Action <br> 1<br>3");   
      return false; 
     break; 

     default: 
      newDialog("You've clicked on a text !", "Please Choose An Action <br> 1<br>3");   
      return false; 
    } 
}; 

function newDialog(mytitle, mycontent){ 
    var $dialog = $('<div></div>') 
     .html(mycontent) 
     .dialog({ 
      autoOpen: false, 
      open: function() {$("*").unbind('click', processAction);}, 
      close: function() {$("*").bind('click', processAction);}, 
      title: mytitle, 
      buttons: { "Cancel": function() { $(this).dialog("close"); } 
        } 
     }); 
    $dialog.dialog('open'); 

} 

我试着设置绑定和取消绑定点击打开和关闭事件,在processAction()函数,但是,它似乎并没有被工作按计划进行。jQuery的:在用户界面对话框禁用点击功能

使用

e.preventDefault(); 

API

http://api.jquery.com/event.preventDefault/

例如

function newDialog(mytitle, mycontent){ 
    var $dialog = $('<div id="something"></div>') 
     .html(mycontent) 
     .dialog({ 
      autoOpen: false, 
      open: function() {$("*").unbind('click', processAction);}, 
      close: function() {$("*").bind('click', processAction);}, 
      title: mytitle, 
      buttons: { "Cancel": function() { $(this).dialog("close"); } 
        } 
     }); 
    $dialog.dialog('open'); 
} 

$('#something a').live('click', function(e){ e.preventDefault(); }); # fixed spelling 

永远不要做类似$("*").click(processAction);。这是非常低效的,加上它基本上陷阱每一个点击事件,这就是为什么它也会导致你的对话框出现问题。

更好的方法是在某个容器中包含您感兴趣的所有内容,并选择该容器内的所有元素。这仍然不是一件好事,这引出了一个问题:你想做什么?也许有更好的方法来做任何你现在想做的事情。