2011-05-10 7 views
6

Tengo mi primer conocimiento en javascript y jquery (móvil) pero ahora encontré algo que simplemente no puedo resolver.Cómo evitar que un botón permanezca resaltado

Tengo un formulario simple con 4 botones, cuando se hace clic en uno se envía un comando al servidor (usando ajax). La cosa es con la interfaz, que el botón presionado (claro como la luz para empezar) se vuelve azul y no vuelve a su estado original. Ni siquiera cuando se hace clic en otro botón, por lo que después de unos pocos clics, todos los botones son azules.

Here is a link to a test page (con los comandos ajax desactivado)

Y esta es la página;

<div id="mainPageHaard" data-role="page"> 

    <div data-role="header" data-position="fixed"> 
     <a href="index.html" data-icon="arrow-l" data-iconpos="notext" >Back</a> 
     <h1>Haard</h1> 
     <a href="index.html" data-icon="home" data-iconpos="notext" >Home</a> 
    </div><!-- /header --> 

    <div data-role="content"> 
     <a id="btnHaardMax" data-role="button" data-icon="arrow-u">Maximaal</a> 
     <a id="btnHaardUp" data-role="button" data-icon="plus">Harder</a> 
     <a id="btnHaardDown" data-role="button" data-icon="minus">Zachter</a> 
     <a id="btnHaardMin" data-role="button" data-icon="arrow-d">Waakvlam</a> 
    </div><!-- /content --> 

    <div data-role="footer" data-position="fixed"> 
     <a href="#configPageHaard" data-role="button" data-rel="dialog" data-transition="pop" data-icon="gear" data-iconpos="notext">Config</a> 
    </div><!-- /footer --> 
</div><!-- /page --> 

Y el javascript

$(document).ready(function() { 

    $("#btnHaardMax").click(function(){ 
     //SendEvent("Gashaard_MAX", 18); 
     return true; 
    }); 
    $("#btnHaardUp").click(function(){ 
     //SendEvent("Gashaard_UP", 18); 
     return true; 
    }); 
    $("#btnHaardDown").click(function(){ 
     //SendEvent("Gashaard_DOWN", 18); 
     return true; 
    }); 
    $("#btnHaardMin").click(function(){ 
     //SendEvent("Gashaard_MIN", 18); 
     return true; 
    }); 
    $("#btnHaardStart").click(function(){ 
     //SendEvent("Gashaard_START", 18); 
     return true; 
    }); 
    $("#btnHaardStop").click(function(){ 
     //SendEvent("Gashaard_STOP", 18); 
     return true; 
    }); 

}); 

Sospecho que sea algo tonto, pero apreciaría si alguien me podría apuntar exactamente a la sillyness en mi código

Thx!

Respuesta

2

Respuesta corta: tiene que quitar la clase css ui-btn-active en el evento de ratón onclick está terminado.

¿Cómo? ¿tu dices?

$().ready(function(){ 
    $('some-selector').mousedown(function(){ 
     $('some-selector').addClass('ui-btn-active'); 
    }) 
    $('some-selector').mouseup(function(){ 
     $('some-selector').removeClass('ui-btn-active'); 
    }) 
    }) 
+0

Eso no resolvió mi problema directamente, pero me disparó en '_removeClass (' ui-btn-active ') _', y encontré la solución. Está relacionado con un error en jq-mobile 1.0a4, mira esta publicación [link] (http://forum.jquery.com/topic/alpha-1-0a4-1-button-bug-active-theme-applied-and -remains) – Tieske

+0

No, nunca he usado jq-mobile, y no tengo idea de cómo funciona el funcionamiento interno de su aplicación. Así que solo podría darte una solución general. Así que proporcioné la respuesta de lo que debía hacerse dom/html wise, y proporcioné un ejemplo de cómo se puede hacer esto con jquery. De todos modos, estoy feliz de que mis pulsaciones de teclas al azar te lleven a una respuesta :) – netbrain

0

Yo recomendaría que una vez que se pulsa un botón, se desactiva hasta que la llamada AJAX ha completado, para evitar accidental de doble prensado, o si no tiene sentido que pulsar el botón de nuevo, deje esta deshabilitado Como sus botones no son botones reales, sino enlaces, vea how to disable/enable buttons and other form elements. Todavía tendrá que jugar con los nombres de las clases del enlace para que parezca que están activos o habilitados, como sugiere netbrain.

En mi humilde opinión, yo usaría real botones HTML.

+0

Desactivar los botones no tendría sentido, ya que el código del lado del servidor solo comienza a ejecutarse después de que la llamada ajax regrese. Entonces el usuario aún no ha visto ningún efecto incluso entonces. Sin embargo, es un enlace útil para un novato, ¡Thx! – Tieske

+0

¿Entonces la llamada AJAX le dice al servidor que ponga algo en cola que se ejecuta en algún momento en el futuro? Si es así, supongo que está bien, pero aún así es un buen extra indicar que algo está sucediendo mientras tanto, es decir, usando una animación spinner o simplemente deshabilitando el botón temporalmente. – BoffinbraiN

0

Esta debería ser una solución bastante general para la mayoría de las personas que no desean este comportamiento predeterminado. tenga en cuenta que necesita el normalized vclick event.

$(document).bind("mobileinit", function(){ 
    $("div[data-role=footer] a").live('vclick', function (e) { 
    $(this).removeClass("ui-btn-active"); 
}); 
Cuestiones relacionadas