2013-04-19 19 views
14

Ist es möglich, auf eine deaktivierte Schaltfläche zu klicken und dem Benutzer Feedback zu geben?Klicken auf eine deaktivierte Eingabe oder Schaltfläche

HTML:

<input type="button" value="click" disabled> 

und JavaScript:

$('input').mousedown(function(event) { 
    alert('CLICKED'); 
}); 

Der obige Code ist nicht für mich zu arbeiten; weder ist dies:

$('input').live('click', function() { 
    alert('CLICKED'); 
}); 
+0

Ich glaube nicht das Click-Ereignis auf einer behinderten Kontrolle werden gefeuert wird –

+0

alle Ereignisse für Behinderte Kontrollen entfernt werden –

+0

dann warum Sie deaktiviert es – samba

Antwort

19

Es gibt keine Möglichkeit, einen Klick auf deaktivierte Elemente zu erfassen. Ihre beste Wette ist, auf ein bestimmtes class auf dem Element zu reagieren.

HTML-Code:

<input type="button" class="disabled" value="click" /> 

JavaScript-Code:

$('input').click(function (event) { 
    if ($(this).hasClass('disabled')) { 
     alert('CLICKED, BUT DISABLED!!'); 
    } else { 
     alert('Not disabled. =)'); 
    } 
}); 

Sie dann CSS Styling verwenden könnten einen behinderten Blick zu simulieren:

.disabled 
{ 
    background-color: #DDD; 
    color: #999; 
} 

hier ein jsFiddle demonstriert seine Verwendung.

1

disabled Elemente nicht dem Benutzer erlauben, mit ihnen zu interagieren.

Also: Nein, Sie können keine onclick auf eine disabled Schaltfläche setzen und erwarten, dass es feuert.

4

Sie können nicht ohne dieses Problem zu umgehen, finden Sie unter: jQuery detect click on disabled submit button

Der Browser Ereignisse für deaktivierte Elemente deaktivieren.

Edited Kontext von Link hinzufügen:

Der Fragesteller hat dieses Thema mit einer Erklärung gefunden, warum die Ereignisse Registrierung nicht: http://www.webdeveloper.com/forum/showthread.php?t=186057

Firefox, und vielleicht andere Browser, deaktivieren Sie auf DOM-Ereignisse Formularfelder , die deaktiviert sind. Jedes Ereignis, das mit dem deaktivierten Formularfeld beginnt, ist vollständig abgebrochen und die DOM-Struktur wird nicht weitergegeben. Korrigieren Sie mich wenn ich falsch liege, aber wenn Sie auf die Schaltfläche deaktiviert, die Quelle von das Ereignis ist die deaktivierte Schaltfläche klicken und das Klickereignis ist vollständig ausgelöscht. Der Browser weiß buchstäblich nicht, dass der Button angeklickt wurde, noch gibt er das Klick-Ereignis weiter. Es ist, als ob Sie auf ein schwarzes Loch auf der Webseite klicken.

Die Problemumgehung wäre Stil der Button "Aussehen" deaktiviert, während es nicht so sein.

-3

Sie sollten deaktiviert = "deaktiviert" und nicht nur deaktiviert verwendet werden.

$('input:disabled').val('disabled'); 
+0

nicht wieder – e1761587

+0

Arbeits Sie können nicht auf ein Element mit deaktiviert = "deaktiviert" klicken - das ist der Punkt, um es zu deaktivieren. – jbolanos

10

Das Feld readonly kann helfen, da das Klickereignis ausgelöst wird.Beachten Sie jedoch die differences in behaviour.

<input type="button" value="click" readonly="readonly" /> 
0

<input id="idButton" type="button" value="click" disabled>

$('#idButton').on('click', function() { 
    // The button is disabled but this will be executed. 
}); 

Das obige Beispiel arbeitet mit JQuery für Behinderte Tasten, die das Ereignis müssen erfasst werden.

+0

Warum glaubst du, dass das funktioniert? Liegt es an der ID? Oder weil es ein Knopf ist? Oder der Wert? Dies funktioniert zumindest bei einer Texteingabe nicht. –

+0

Um ehrlich zu sein, bin ich mir nicht sicher, aber ich vermute, dass es die Reihenfolge ist, in der JQuery den Listener beim Laden des DOM assoziiert oder höchstwahrscheinlich einfach die deaktivierte Eigenschaft ignoriert. – Lisandro

3

Put

input[disabled] {pointer-events:none} 

in Ihrem CSS (es verhindert, dass einige Browser klickt auf behinderte Eingänge insgesamt zu verwerfen), und erfassen den Klick auf ein übergeordnetes Element. Es ist eine sauberere Lösung, IMHO, als ein transparentes Overlay über das Element zu setzen, um den Klick zu erfassen, und je nach Umständen auch viel einfacher als einfach den deaktivierten Zustand mit CSS zu simulieren (da dies die Eingabe nicht verhindern wird) Übergeben, und erfordert auch das Überschreiben der Standard-Browser "deaktiviert" -Stil). Wenn Sie mehrere solcher Schaltflächen haben, benötigen Sie jeweils ein eindeutiges übergeordnetes Element, um unterscheiden zu können, auf welche Schaltfläche geklickt wurde, da das Klickziel mit pointer-events:none das übergeordnete Element der Schaltfläche und nicht die Schaltfläche selbst ist. (Oder Sie könnten die Klick-Koordinaten testen, nehme ich an ...).

Wenn Sie ältere Browser unterstützen müssen, nicht aber, prüfen Sie, welche diejenigen Unterstützung pointer-events: http://caniuse.com/#search=pointer-events

+0

funktioniert für mich in FF - einfachste und kompatibelste Antwort – iPherian

0

Sie können nicht auf deaktivierte Schaltfläche klicken, kann aber auf deaktiviert Link klicken

$('.btn').on('click', function(e) { 
 
    e.preventDefault(); 
 
    $txt = $('div.text'); 
 
    if($(this).attr('disabled')){ 
 
    $txt.html('CLICKED, BUT DISABLED!!'); 
 
    }else{ 
 
    $txt.html('Not disabled. =)'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="text">No action</div> 
 
<input type="button" href="" class="btn" value="click" /> 
 
<input type="button" href="" class="btn" value="click disabled" disabled /> 
 
<a href="" class="btn">Click</a> 
 
<a href="" class="btn" disabled>Click Disabled</a>

0

Wie wäre es, den Knopf in ein Element zu legen und stattdessen auf dieses Element zu klicken?

<span id="container"> 
    <input type="button" value="click" disabled> 
</span> 

Javascript:

$("#container").click(function(){ 
    alert("Element clicked!"); 
}) 
Verwandte Themen