2013-10-28 7 views
14

Also ich eine Tabelle mit Javascript und jQuery erstellen, und ich will es so, dass, wenn Sie auf die TD in der ersten Zeile der Tabelle klicken, dann der Rest der TDs in dieser Spalte Dropdown. Lassen Sie mich versuchen, es zu erklären, indem Sie meinen Code zeigen. Hier ist mein Javascript:jQuery .click funktioniert nicht auf < td > tag?

function createTr (heights) { //heights is just an array of words 
    for (var h=0; h<heights.length; h++) { 
     var theTr = $("<tr>", { id: "rowNumber" + h}); 
     for (var i=0; i<heights.length-3; i++) { 
      theTr.append($("<td>", { "class": "row"+h + " column"+i, 
            html: heights[h][i] 
            })); 
     } 
     $('#newTable').append(theTr); // append <tr id='rowNumber0'> to the table (#newTable), which is written in the html 
    } 
} 

Dies schafft im Grunde TDs und jedes td ähnelt diesem Format

<td class="rowh columni"> 

Ich will es so, dass alle TDs versteckt sind mit Ausnahme des TDs in .row0 und wenn Sie klicke auf die td in .row0 .columni, dann erscheinen alle tds in .columni. Der Parameter ‚Höhe‘ ist jsut einer Anordnung, zum Beispiel, kann es

var heights = [['headerOne', 'headerTwo'], ['someTd', 'anotherTd'],]; 

sein, und es wäre die Verwendung einer Tabelle, diese Worte zu erstellen, headerOne und headerTwo in der ersten Reihe sein würde, someTd und anotherTd würde in der sein zweite Reihe.

Jetzt, wenn ich versuche,

wie so
function animation() { 
    $('td').click(function() { 
     alert('clicked'); 
    }); 
} 

eine Klick-Funktion hinzuzufügen, und es dann wie in meiner document.ready Funktion aufrufen, so

$(document).ready(function() { 

    createTr(heights); 
    animation(); 
}); 

es macht nichts, wenn ich klicke auf einen td. Woher?

Antwort

30

http://api.jquery.com/on/

Da Sie die Elemente erstellen, nachdem das DOM erstellt wurde. Verwenden Sie den Schalter "on", um das präzise Element zu erhalten, das dynamisch erstellt wird.

Von der URL:

$("#newTable").on("click", "td", function() { 
    alert($(this).text()); 
    }); 
+0

hm was meinst du mit #newTabletbody? Ich habe versucht $ ("# newTable") auf und das hat nicht funktioniert. – user2719875

+0

Sorry, das war ein Tippfehler. Sie können versuchen, $ ('body'). On ('klicken, wenn das nicht zu funktionieren scheint. – Churchill

+0

hm $ (' body '). On (' klicken 'funktioniert auch nicht. Ich setze den ganzen Code in der Funktion namens animation, wie so - function animation() {$ ('body'). on ('klick', 'td', funktion() {alert ('angeklickt');});} - aber Es scheint immer noch nicht zu funktionieren. – user2719875

3

wie diese versuchen:

$('body').on('click','td', function() { 
     alert('clicked'); 
    }); 
+0

hm, scheint nicht zu arbeiten. – user2719875

+1

, wenn Sie das Extra löschen '(' nach dem ' td 'dann funktioniert es nur, wenn ich es vor das $ (document) .ready (funktion. – user2719875

+0

oh ja !! danke für das hinweisend :) –

1

dieses versuchen

function animation() { 
    $(document).on('click','td',function() { 
    alert('clicked'); 
    }); 
} 
+0

Gibt es diese zusätzliche Klammer nach' td ', (? Weil der andere Benutzer, der eine Antwort gepostet hat, hat das Gleiche getan und die Klammer, die nach der 'td' direkt vor der Funktion erscheint, nicht geschlossen. – user2719875

+0

Sorry, das war ein Tippfehler –

+1

Aber okay, das funktioniert und die andere Antwort ($ ('Körper'). On) funktioniert auch nur, wenn ich es vor dem $ (Dokument) .ready (Funktion ..... Danke. – user2719875

0

Dieser Code funktioniert gut:

$(document).ready(function(){ 
    $("td").click(function(){ 
     if(this.title!=""){ 
      alert(this.title); 
     } 
    }); 
}); 
0

Ich mag das.-

$("#table tr").click(function(){ 
    console.log(this); 
});