2011-08-14 4 views
2

나는이 같은 각 행의 생산 뭔가 동적으로 생성되는 테이블 :jQuery를 수식 게시물 'NaN이'비록 각각의 값은 캐스팅

<tr name="0"> 
    <td style="text-align:left;">January</td> 
    <td><input type="text" name="LIB1" value="0" class="oneInput row0" /></td> 
    <td><input type="text" name="RPI1" value="0" class="oneInput row0" /></td> 
    <td><input type="text" name="LMM1" value="0" class="oneInput row0" /></td> 
    <td><b><span class="screenOneTotal">0</span></b></td> 
</tr> 

내가 마지막에 행에 각 입력의 총을 둘 필요 값이 입력 될 때 열. 따라서, 내가 명시 적으로 float로 각 값을 캐스팅하고 있다는 사실에도 불구하고 document.ready 기능

$(".oneInput").live('blur', function(){ 
var rowID = $(this).parent().parent().attr('name'); 
var thisLIB = $("input[name=LIB + rowID]").val(); 
var thisRPI = $("input[name=RPI + rowID]").val(); 
var thisLMM = $("input[name=LMM + rowID]").val(); 
var rowTotal = parseFloat(thisLIB) + parseFloat(thisRPI) + parseFloat(thisLMM); 
$(this).parent().parent().find('span.screenOneTotal').empty().html(parseFloat(rowTotal)); 
}); 

에서이 기능을 배치, 마지막 컬럼에 삽입 된 값은 "NaN이"입니다.

+0

당신이 방화범의 문제를 좁힐 수 있다는 확신이의'NaN'이 처음 나타나는 계산하는 단계에서 찾을 수 있습니다. –

답변

1

있는 행 아래에 있어야합니다, 그래서 그 아이는 LIB1, LPT1 및 LMM1 있습니다 나는 당신이 일을과 복잡함을 (그리고 그들을 undercomplicating 것 같아요 같은 시간). 지나친 복잡성은 특정 패턴에 맞는 모든 것을 가져 와서 그룹으로 취급 할 수있을 때 세 가지 구체적인 것을 찾고 개별적으로 치료한다는 것입니다. 복잡도가 낮 으면 parseFloat의 오류 조건과 NaN의 이상한 (익숙해지기 전까지) 동작을 고려하지 않는다는 것입니다.

여러분은 DOM을 올라가서 <tr>이 들어 있고 그 행에있는 모든 .oneInput 요소를 반복하는 것이 더 나을 것이라고 생각합니다. 그런 다음 작은 코드 덩어리를 사용하여 문자열 값을 의미있는 숫자로 변환 할 수 있습니다 같은 방법 : DOM을 올라갈 것 closest 호출이 포함 <tr>을 찾을

$(".oneInput").live('blur', function() { 
    var $row  = $(this).closest('tr'); 
    var rowTotal = 0; 
    $row.find('input.oneInput').each(function() { 
     var n = parseFloat(this.value); 
     if(!isNaN(n)) 
      rowTotal += n; 
    }); 
    // Do whatever you need to do with rowTotal 
}); 

는 다음 findoneInput의 클래스, each있는 사람을 통해 다음 루프를 해당 행의 모든 ​​<input> 요소를 얻을 것이다에서 바로 각 값을 추출하십시오. DOM 요소에 parseFloat을 입력하고 parseFloat이 숫자를 찾으면 누계 합계에 rowTotal을 추가합니다. parseFloat에 NaN이 전달되었는지 확인하려면 isNaN을 확인하십시오. 이 같은

뭔가 : http://jsfiddle.net/ambiguous/DBQL3/

+0

+1 먼 길을 이길 수 있습니다. . – naveen

+0

jQuery는 물론 그 사실을 배울 수 있기를 바랍니다 ... 이것은 진정 학습용 사료가 될 것입니다. 모두에게 감사하고 새로운 도구 --- jsfiddle을 보여줘서 고마워! – jgravois

+0

귀하의 바이올린이 포함되어 있지만 귀하의 대답은 주요 문제를 일으키는 '

'의 부족을 완전히 무시합니다. –

3

$("input[name=LIB + rowID]").val() 보이지 않습니다.

$("input[name=LIB" + rowID + "]").val()을 찾으셨습니까? 당신의 선택이 실패하면


.val()은 비어 있고 parseFloat 당신에게 NaN을 줄 것이다.

+0

연결이 오류라고 생각하지만 제안한 세 줄을 변경했을 때 마지막 열 값이 숨겨 지거나 바뀌지 않았습니다. – jgravois

+0

@jgravois : 설명할만한 예를 들어주세요. –

+0

내 수식이 $ (". oneInput")이되었습니다. live ('blur', function() { var rowID = $ (this) .parent(). 부모(). attr ('이름'); // alert (rowID); var thisLIB = $ ("input [name = LIB"+ rowID + "]").val(); var thisRPI = $ ("input [name = RPI"+ rowID + "]") .val(); var thisLMM = $ ("input [name = LMM"+ rowID + "]") .val(); var rowTotal = parseFloat (thisLIB) + parseFloat (thisRPI) + parseFloat (thisLMM); $ (this) .parent(). parent(). find ('span.screenOneTotal'). empty() .html (rowTotal); }}); – jgravois

2

Tomalak의 답변 외에도 속성 선택자는 따옴표로 묶어야합니다. 귀하의 예는 행의 이름 속성이 0 것을 보여준다 그러나 그들은 name='1'

var thisLIB = $("input[name='LIB" + rowID+"']").val(); 
+0

좋은 자리입니다. –

+0

이것은 제가 일하기 위해 작성한 급여 예산 신청서에서 발췌 한 것입니다. 회계 월은 0부터 시작하는 배열이지만 [0] 값은 null로 모든 값을 저장하므로 출력 할 때 +1을 fiscalVariable에 추가해야합니다. – jgravois