2013-07-18 3 views
0

작은 프로젝트로서 간단한 온라인 혈액학 차이 카운터를 만들려고합니다. 물리적 카운터 (영광스러운 계산기 이상은 아닙니다)는 장치 당 1000 달러를 초과하는 실험실을 실행합니다. 저개발국의 소규모 실험실 및 연구소는이 비용을 감당할 수 없기 때문에 온라인 솔루션이 유용 할 수 있습니다.간단한 문자 빈도 카운터이지만 왜 실시간 계산되지 않습니까?

HTML

<h1>Use the number pad to count cells</h1> 
    <textarea id="textarea"></textarea> 
<br>Cells counted: 
<br> 
<input type=text id="counter" size=5><br> 
Blasts:<br><input type=text id="bl_num" size=5><br> 
Blasts%:<br><input type=text id="bl_pct" size=5><br> 
Segmented and band neutrophils:<br><input type=text id="segs_num" size=5><br> 
Segmented and band neutrophils%:<br><input type=text id="segs_pct" size=5><br> 
Lymphocytes:<br><input type=text id="lymph_num" size=5><br> 
Lymphocytes%:<br><input type=text id="lymph_pct" size=5><br> 
Metamyelocytes/myelocytes:<br><input type=text id="meta_num" size=5><br> 
Metamyelocytes/myelocytes%:<br><input type=text id="meta_pct" size=5><br> 
Promyelocytes:<br><input type=text id="pro_num" size=5><br> 
Promyelocytes%:<br><input type=text id="pro_pct" size=5><br> 
Monocytes:<br><input type=text id="mono_num" size=5><br> 
Monocytes%:<br><input type=text id="mono_pct" size=5><br> 
Nrbc:<br><input type=text id="nrbc_num" size=5><br> 
Nrbc%:<br><input type=text id="nrbc_pct" size=5><br> 
Eosinophils:<br><input type=text id="eos_num" size=5><br> 
Eosinophils%:<br><input type=text id="eos_pct" size=5><br> 
Plasma cells:<br><input type=text id="plasma_num" size=5><br> 
Plasma cells%:<br><input type=text id="plasma_pct" size=5><br> 
Basophils:<br><input type=text id="baso_num" size=5><br> 
Basophils%:<br><input type=text id="baso_pct" size=5><br> 
Atypical cells:<br><input type=text id="atyp_num" size=5><br> 
Atypical cells%:<br><input type=text id="atyp_pct" size=5><br> 

내 스크립트,하지만 문자 주파수 데이터가 채워지지 않는 이유 이해가 안 :이 원유 예 (http://jsfiddle.net/xpMTE/ 여기 참조) 작업이

$(window).load(function(){ 
$("#textarea").keyup(function() { 
    var box = $(this).val(); 
    var len = box.length; 
    if (len < 201) { 
     $('#counter').val(len); 
// count blasts 
    var _blast = box.match(/8/g).length; 
    var _blast_pct = (_blast/len) * 100; 
    $('#bl_num').val(_blast); 
    $('#bl_pct').val(_blast_pct); 
    // count segs 
    var _segs = box.match(/3/g).length; 
    var _segs_pct = (_segs/len) * 100; 
    $('#segs_num').val(_segs); 
    $('#segs_pct').val(_segs_pct); 
    // count meta/myelo 
    var _meta = box.match(/7/g).length; 
    var _meta_pct = (_meta/len) * 100; 
    $('#meta_num').val(_meta); 
    $('#meta_pct').val(_meta_pct); 
    // count pros 
    var _pro = box.match(/5/g).length; 
    var _pro_pct = (_pro/len) * 100; 
    $('#pro_num').val(_pro); 
    $('#pro_pct').val(_pro_pct); 
    // count lymphs 
    var _lym = box.match(/2/g).length; 
    var _lym_pct = (_lym/len) * 100; 
    $('#lymph_num').val(_lym); 
    $('#lymph_pct').val(_lym_pct); 
    // count nrbcs 
    var _nrbc = box.match(/9/g).length; 
    var _nrbc_pct = (_nrbc/len) * 100; 
    $('#nrbc_num').val(_nrbc); 
    $('#nrbc_pct').val(_nrbc_pct); 
    // count eos 
    var _eos = box.match(/4/g).length; 
    var _eos_pct = (_eos/len) * 100; 
    $('#eos_num').val(_eos); 
    $('#eos_pct').val(_eos_pct); 
    // count mono 
    var _mono = box.match(/1/g).length; 
    var _mono_pct = (_mono/len) * 100; 
    $('#mono_num').val(_mono); 
    $('#mono_pct').val(_mono_pct); 
    // count plasma 
    var _plasma = box.match(/6/g).length; 
    var _plasma_pct = (_plasma/len) * 100; 
    $('#plasma_num').val(_plasma); 
    $('#plasma_pct').val(_plasma_pct); 
    // count basos 
    var _baso = box.match(/\+/g).length; 
    var _baso_pct = (_baso/len) * 100; 
    $('#baso_num').val(_baso); 
    $('#baso_pct').val(_baso_pct); 
    // count atypcal cells 
    var _atyp = box.match(/\-/g).length; 
    var _atyp_pct = (_atyp/len) * 100; 
    $('#atyp_num').val(_atyp); 
    $('#atyp_pct').val(_atyp_pct); 
    } else { 
     alert("You have counted 200 cells"); 
    } 

}); 
}); 

실시간? 사용자가 숫자 패드를 사용하여 현미경에서 볼 수있는 셀을 계산할 때 카운터는 그래프의 나머지 부분을 채우기 전에 일정한 인스턴스가 발생할 때까지 기다리는 것처럼 보입니다. 이상적인 조건은 아닙니다.

답변

0

좋아요, 생각났습니다. 내 콘솔 로그에서 내 .match 문이 일치하는 항목을 찾지 못하면 null을 반환하므로 null.length가 유효하지 않은 오류가 강조 표시되었습니다.

그래서, if 문 초기의 외부 .match 인수했다, 대신 일련의를 추가 한 경우 문 등이 :

// count blasts 
if (box.match(/8/g) !== null) { 
    var _blast = box.match(/8/g).length; 
    var _blast_pct = (_blast/len) * 100; 
    $('#bl_num').val(_blast); 
    $('#bl_pct').val(_blast_pct); 
} 

등 키를 누를 때마다 일치합니다.

이제 상자가 실시간으로 채워집니다.

여기를 참조하십시오 : http://jsfiddle.net/xpMTE/1/