2012-04-05 1 views
0

Ich habe eine Anzahl von .box Elemente innerhalb einer .color_container. Ich habe diese Funktion so geschrieben, dass ich, wenn ich auf eines dieser Felder klicke, die Hintergrundfarbe ändern kann. Das funktioniert gut mit einer Box, aber wenn ich auf eine andere klicke und ihre Farbe ändere, sind auch alle anderen Kästchen betroffen, auf die ich geklickt habe.mehrere IDs betroffen, wenn ich nur eine (javascript & jquery) ändern möchte

Ich möchte nur die Farbe der Box, die ich gerade angeklickt habe, ändern. Hier ist mein Code. Vielen Dank im Voraus für jede Hilfe dabei.

function defineColor(){ 
$(".color_container .box").click(function(){ 
    var boxToModify = $(this); 

    if($(this) .hasClass("plus")){ 
     $(this) .css("background-color", "rgb(255, 255, 255)") 
       .removeClass("plus") 
       .contents().remove(); 
    }; 

    var rgb = $(this).css("background-color").match(/\d{1,3}/g);   
    $("#box_r input").val(rgb[0]); 
    $("#box_g input").val(rgb[1]); 
    $("#box_b input").val(rgb[2]); 

    $(".box input").keyup(function(event){ 

     var value = $(this).val(); 

     if(value > 255 || isNaN(value)){ 
      alert("Error! Input must be a number 255 or less."); 
     }else if(value >= 0 && value <=255){ 
      var r = $("#box_r input").val(); 
      var g = $("#box_g input").val(); 
      var b = $("#box_b input").val(); 
      var output = "rgb(" + r + ", " + g +", " + b + ")"; 

      $(boxToModify).css("background-color", output); 
     }; 
    }); 
}); 

};

+1

Können Sie Ihren HTML-Code posten. Möglicherweise verfügen Sie über doppelte Elemente, die Ihren Auswahlkriterien entsprechen. –

+2

Dies ist nicht das Problem, aber beachten Sie, dass '$ (boxToModify)' unnötig ist, da 'boxToModify' bereits ein jQuery-Objekt (dritte Codezeile) ist. Also, Sie können nur 'boxToModify.css (...' –

+3

Sie sollten keine Handler innerhalb eines Handlers hinzufügen. Ihr Click-Handler erstellt einen Schlüssel nach oben. Das ist schlecht. – AutoSponge

Antwort

2

Sie könnten dies ändern möchten:

$(".box input").keyup(function(event){ 

dazu:

$(this).find('input').off('keyup').on('keyup', function(event) { 

Sie sind auf jeden Klick eines einzigen Box ein keyup Ereignis für alle Boxen mit dieser Klasse zu binden.

+0

Danke für den Tipp, aber das hat es nicht ganz getan – ben

+0

Bist du sicher? Ohne eine Geige oder irgendetwas, bleibe ich bei meiner Antwort, heh. – AlienWebguy

+0

Es sieht so aus, als wenn ich dein Bit eintausche, kann die Funktion keinen 'Wert' oder etwas definieren, weil es nicht mehr verändert Hintergrundfarbe von irgendwelchen der Kästen. Ich bin ein bisschen neu zu diesem (wie ich bin sicher, dass Sie von meinem Code unterscheiden können). – ben

Verwandte Themen