2016-05-21 18 views
0

ich eine Tabelle haben, dass in jeder Reihe, dass es eine Combobox in einem td-Tag ist, ich will, wenn Combobox geändert dann Inhalt des nächsten td ändertÄnderung Inhalt des nächsten td von jquery mit

ich diesen Code schrieb aber es funktioniert nicht:

$(document).ready(function() { 
    $('#table tr td').find('.combobox').change(function() { 
     var myvar=$(this).val(); 
     $.post("./data.php", { 
        p_array : myvar, 
        }, function(data) { 
         $(this).parent().next('td').html(data); 
       }); 
    }); 
}); 

Tabellenstruktur:

<table> 
    <tr> 
     <td> 
     <select class="combobox"> 
      <option> 
        select something 
      </option> 
     </select> 
     <td> 
     <td>must be changed</td> 
    <tr> 
</table> 

, was ist das Problem?

Antwort

1

this in der Post ist andere Sache als this vor Post ... die einfachste Lösung wäre:

$(document).ready(function() { 
    $('#table tr td').find('.combobox').change(function() { 
     var myvar=$(this).val(); 
     var xthis = this; 
     $.post("./data.php", { 
        p_array : myvar, 
        }, function(data) { 
         $(xthis).parent().next('td').html(data); 
       }); 
    }); 
}); 
1

Wenn Sie diese verwenden Sie besser in einer Variablen-Cache werden wie die Flash. Weil dies eine andere Bedeutung hat, wenn es in einem anderen Bereich ist. Auch könnten Sie besser mit dem Element am nächsten kommen, so dass Sie sicher sind, dass Sie den nächsten td referenziert haben.

$(document).ready(function() { 
    $('#table tr td').find('.combobox').change(function() { 
     //cache it as soon as possible for performance reasons and readability 
     var $this =$(this); 
     var myVar = $this.val(); 
     $.post("./data.php", { 
        p_array : myvar, 
        }, function(data) { 
         $this.closest('td').next('td').html(data); 
       }); 
    }); 
});