2016-05-13 13 views
1

Ich versuche, einen Farbfilter für eine Website zu machen. Wo ich das sichtbare checkbox entfernen möchte (ich habe das funktioniert), entfernen Sie die Etiketten etc. Und nur ein div mit einer Hintergrundfarbe < lassen - das alles funktioniert. Aber jetzt weiß ich nicht, wie man diese divs klickbar macht, da das Eingabefeld versteckt ist. Gibt es eine Möglichkeit, dies in jQuery zu beheben?jquery klicken Sie auf ein Kontrollkästchen, das ausgeblendet ist

Hier ist mein Code:

function onDataReceived(data) { 
     $.each(data.colorInfo, function(key, colorInfo) { 
      var inputElement = $("input[name^=filter][value="+colorInfo.id+"]").css("display", "none"); 
      var labelElement = $('label[for^=filter]').remove(); 
      var div = inputElement.parent(); 

      div.attr('class', 'myclass_'+colorInfo.id); 
      div.css("background-color", colorInfo.colorCode); 
      div.css("width", "15px"); 
      div.css("height", "15px"); 
      div.css("display", "inline-block"); 
      div.css("marginLeft", "5px"); 
      div.css("marginBottom", "5px"); 
      //console.log(colorInfo); 
     }); 
    } 

    $(document).ready(function() { 
     var url = 'myapi.json'; 
     $.get(url, onDataReceived); 
    }); 

Und der HTML:

<div class="filter_3"> 
    <input name="filter[]" value="152194" type="checkbox"/> 
    <label for="filter_152194">Rood</label> 
</div> 
<div class="filter_4"> 
    <input name="filter[]" value="152196" type="checkbox"/> 
    <label for="filter_152196">Blauw</label> 
</div> 
<div class="filter_5"> 
    <input name="filter[]" value="152198" type="checkbox"/> 
    <label for="filter_152198">Oranje</label> 
</div> 
+0

diese Antwort Versuchen Sie http://stackoverflow.com/a/4177175/6127393 Es sollte keine Rolle spielen, ob die Eingabe verborgen ist. –

Antwort

2

Unter der Annahme, dass eine Funktion, sobald die div geklickt heißt es:

function onDataReceived(data) { 
    $.each(data.colorInfo, function(key, colorInfo) { 
     var inputElement = $("input[name^=filter] [value="+colorInfo.id+"]").css("display", "none"); 
     var labelElement = $('label[for^=filter]').remove(); 
     var div = inputElement.parent(); 

     div.attr('class', 'myclass_'+colorInfo.id); 
     div.css("background-color", colorInfo.colorCode); 
     div.css("width", "15px"); 
     div.css("height", "15px"); 
     div.css("display", "inline-block"); 
     div.css("marginLeft", "5px"); 
     div.css("marginBottom", "5px"); 
     /* Added Lines */ 
     div.css("pointer-events", "auto"); //Just in case, but it's probably not necessary 
     div.css("cursor", "pointer"); //It's nice to have 
     div.on('click', function() { //This is a click event delgated to the div 
      // Whatever code is needed when div is clicked 
     }); 
     //console.log(colorInfo); 
    }); 
} 

$(document).ready(function() { 
    var url = 'myapi.json'; 
    $.get(url, onDataReceived); 
}); 
+0

Gibt es auch einen Weg, wenn die Box deaktiviert wird, um Code auszuführen? –

+0

Verwenden Sie '$ ('whatever_selector'). On ('change', function() {....' oder ... 'on ('click', function() {...} auch Sie Wahrscheinlich müssen Sie sich mit '.checked' vertraut machen. Siehe diesen Beitrag: http://stackoverflow.com/a/7031408/2813224 – zer00ne

+0

div.on ('click', function() {// Dies ist ein click-Ereignis, das an die Adresse delegiert ist div div.css ("Hintergrundfarbe", "# 333"); }); div.on ('Veränderung', Funktion() { div.css ("Hintergrundfarbe", „#fff "); }); So funktioniert es nicht? –

Verwandte Themen