2010-12-09 11 views
2

es ist also ziemlich schwer in einen Satz zu setzen, aber hier ist ein einfaches Beispiel:Wie kann ich einen Unschärfe-Listener ignorieren, wenn in jQuery ein anderer Klick-Listener verwendet wird?

<html> 
    <head> 
     <title>Example</title> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
     <script type="text/javascript"> 
     <!-- 
      $(document).ready(function() { 
       $("#input").focus(function() { 
        $("#p").show(); 
       }).blur(function() { 
        $("#p").hide(); 
       }); 
       $("#p").click(function() { 
        alert("Thanks for clicking me"); 
       }); 
      }); 
     --> 
     </script> 

    </head> 
    <body> 
     <input type="text" id="input" /> 
     <p id="p" style="background:red;display:none""> 
      Click me. 
     </p> 
    </body> 
</html> 

Grundsätzlich, wenn Sie an einem Eingang konzentrieren ein Absatz erscheint und wenn der Fokus verschwommen den Absatz verschwinden. Es gibt jedoch auch einen Klick-Listener für den Absatz. Wenn Sie darauf klicken, wird eine Warnmeldung angezeigt. Das Problem ist, wenn ich das Eingabefeld fokussiere, erscheint der Absatz [erwartet], aber wenn ich auf den Absatz klicke, wird die Unschärfe des Eingabefelds zuerst registriert, so dass der Absatz ausgeblendet wird, bevor der Browser erkennt, dass ich darauf geklickt habe.

Antwort

2

Versuchen Ben Alman's jQuery Outside events plugin

Dann würde Ihr Code sein:

$(document).ready(function() { 
    $("#input").focus(function() { 
     $("#p").show(); 
    }).bind('focusoutside', function(event) { 
     if (!$(event.target).is('#p')) { 
      $("#p").hide(); 
     } 
    }); 
    $("#p").click(function() { 
     alert("Thanks for clicking me"); 
     // Do this if you need to hide #p after doing 
     // whatever click on p really does. 
     $(this).hide(); 
    }); 
}); 

Durch die focusoutside Ereignis mit ihm Dazu klicken Sie erfassen wird und Tabbing von #input weg und lassen Sie entscheiden, je nachdem, wo der Fokus ging wollen machen.

Beispiel: http://jsfiddle.net/petersendidit/WSEWh/2/

+0

Sie nicht benötigen Sie die $ ("# p") ausblenden() in der Klick-Funktion dann.? – mikesir87

+0

@ mikesir87 Hängt davon ab, was er machen möchte, wenn '# p' geklickt wird. Aber höchstwahrscheinlich ja. – PetersenDidIt

+0

Klingt gut! Ich wusste nichts über das Event-Objekt, das war ziemlich nützlich. Vielen Dank! – mikesir87

Verwandte Themen