2010-12-21 5 views
11

EDIT: das funktioniert, aber nicht sicher warum?jquery - jeder/klick funktioniert nicht

$('button').each(function() { 
    $(this).bind(
     "click", 
     function() { 
      alert($(this).val()); 
     }); 
    }); 

Ich bin mir nicht sicher, warum dies nicht funktioniert ... Im Moment bin ich nur eine Benachrichtigung über den Button Wert ausgibt versucht, aber es funktioniert nicht auf meiner Seite. Ich bekomme in Firebug keine Konsolenfehler und kann nichts sehen, was die Arbeit daran hindern würde.

Mein HTML sieht wie folgt aus:

<table id="addressbooktable"> 
<thead> 
    <tr> 
     <th>Name</th> 
     <th>Action</th> 
    </tr> 
</thead> 

<tbody> 
    <tr> 
     <td>7892870</td> 
     <td><button id="button-20" class="custom-action" value="XY89" name="info">Click</button></td> 
    </tr> 

    <tr> 
     <td>9382098</td> 
     <td><button id="button-21" class="custom-action" value="XY544" name="info">Click</button></td> 
    </tr> 

    <tr> 
     <td>3493900</td> 
     <td><button id="button-22" class="custom-action" value="XY231" name="info">Click</button></td> 
    </tr> 
</tbody> 
</table> 

Und der Code sieht wie folgt aus:

$('button').each(function() { 
    $(this).click(function() { 
     alert($(this).val()); 
    } 
    }); 

Aber Klick darauf gar nichts tut? Benutze ich es falsch?

+0

Wahrscheinlich nicht das Problem, aber Sie haben nicht die .each benötigen, können Sie Klicken Sie auf ein jQuery-Objekt mit mehr als einem Knoten und es bindet alle Objekte. – Shurdoof

+0

markiere eine Antwort? – hunter

Antwort

20

Sie alle Tasten mit einem Klick Ereignisse wie diese binden können, da durch sie keine Notwendigkeit

$(function(){ 
    $("button").click(function() { 
     alert($(this).attr("value")); 
    }); 
}); 

Aber ein genauerer Wähler könnte Schleife:

$(function(){ 
    $("button[id^='button-'").click(function() { 
     alert($(this).attr("value")); 
    }); 
}); 
+0

Danke, das funktioniert! –

+0

als Antwort markieren? – hunter

+0

Dies ist viel effizienter, da der Selektor bereits einen Verweis auf die Elemente enthält, anstatt jedes Element() als separates Element zu behandeln. – IamFace

0

Yup. Versuchen Sie folgendes:

$('button').click(function() { 
     alert($(this).val()); 
    }); 

Sie auch eine return false oder .preventDefault() dort möchten.

0

Sie nicht .val() verwenden können Methode für Knopf. Sie können .attr() verwenden, um das Wertattribut abzurufen. Wenn Sie benutzerdefinierte Attribute verwenden, verwenden Sie data-attribute.

Versuchen

$("button").click(function(){ 
    alert($(this).attr("value")); 
}); 
+0

Hallo, danke für die Antworten ... Nach dem Posten habe ich "bind" benutzt und es scheint zu funktionieren ... Fragst du, ob jemand erklären kann, warum es in diesem Fall funktioniert, aber nicht im Original? Ich bearbeite meinen Beitrag, um zu zeigen, was ich geändert habe ... –

+0

@ N00BNum1 - du vermisst ein ');' in deinem Code, also war es nicht gültig ... siehe meine Antwort :) –

7

Sie eine ); fehlt, und der Code in einem document.ready Handler stellen Sie sicher ist, wie folgt aus:

$(function() { 
    $('button').each(function() { 
    $(this).click(function() { 
     alert($(this).val()); 
    }); //missing); here! 
    }); 
}); 

diese Weise ist es nicht, bis diese <button> laufen Elemente sind im DOM für $('button') zu finden. Auch Sie .click() auf eine Reihe von Elementen ausführen können, wie folgt aus:

$(function() { 
    $('button').click(function() { 
     alert($(this).val()); 
    }); 
}); 
+0

hoppla, naja entdeckt +1 – lnrbob

1

Sie fehlen ):

$('button').each(function(){ 
      $(this).click(function(){ 
       alert($(this).val()); 
      }); 
     });