2016-09-16 17 views
0

Ich habe diesen Code, der Wert von der td erhalten und es zu anderen MVC-Ansicht übergeben kann. aber irgendwie kann ich nicht den Wert von Hidden Klassen Eigenschaften bekommen?Jquery get und setzen Wert

<tr onclick="textover(this)"> 
     <td> 
      @ul.Email 
     </td> 
     <td> 
      @ul.Fullname 
     </td> 
     <td> 
      @ul.Company.Name    
     </td> 
     <td class="hidden"> 
      <input type="hidden" name="UserId" id="UserId" value="@ul.Id" /> 
     </td> 

JQuery

function textover(id) { 
    $('#Email').val($(id).find("td").eq(0).text().trim()); 
    $('#Fullname').val($(id).find("td").eq(1).text().trim()); 
    $('#Company').val($(id).find("td").eq(2).text().trim()); 
    $('#IdNo').val($(id).find("td").text(3).trim()); 
+0

Ich nehme an, Sie bedeuten 'eq (3)', nicht 'Text (3)' aber in jedem Fall zu behandeln, dass '' nicht der Fall ist habe ein 'text()' - du müsstest das '' finden und dessen' .val() 'benutzen. aber Ihr Code schlägt vor, dass Sie mehrere Eingaben mit 'id =" UserId "haben, was ein ungültiger HTML-Code ist. Aber warum sollte ein versteckter Eingang trotzdem anstelle von ' @ ul.Id'? –

Antwort

2

Dieses Stück Code .text(3), ist der Bösewicht!

text Methode hat keine Überladung, die den Array-Index nimmt !. Diese Codezeile sollte also abstürzen!

Es ist nicht sehr sicher, die eq-Methode mit Index zu verwenden, um ein Element zu erhalten. Was ist, wenn du morgen einen weiteren td in der Mitte hinzufügst und jetzt ein paar Indexwerte mit eq Methodenaufrufen beheben musst!

Warum nicht den Selektor verwenden, der den Wert des Namensattributs angibt? Auch für das Eingabefeld müssen Sie den Wert mit der Methode val() ermitteln.

var userId = $(id).find("input[name='UserId']").val(); 
alert(userId); 
$('#IdNo').val(userId); 

IMHO kann yo eine CSS-Klasse auf die TDs geben und die Auswahl für Ihre jQuery verwenden, anstatt auf die Indizes zu verlassen. Sie können auch in Betracht ziehen, Ihr JavaScript unauffällig zu machen.

<tr class="selectableRow"> 
     <td class="email"> @ul.Email</td> 
     <td class="fullName"> @ul.Fullname </td> 
     <td class="companyName"> @ul.Company.Name 
      <input type="hidden" name="UserId" id="UserId" value="@ul.Id" /> 
     </td> 
</tr> 

und das Skript die Zeile klicken Ereignis

$(function(){ 
    $("tr.selectableRow").click(function(e){  
     var email = $(this).find(".email").val(); 
     var fullName = $(this).find(".fullName").val(); 
     // do something with these  
    });  
});