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>

私のスクリプト:

$(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");
    }

});
}); 

この大まかな例が機能しています (ここを参照してください: http://jsfiddle.net/xpMTE/ ) が、文字頻度データがリアルタイムで入力されない理由がわかりませんか? ユーザーが数字パッドを使用して顕微鏡で見た細胞を数えると、カウンターは特定のインスタンスが最初に発生するのを待ってから、グラフの残りの部分にデータを入力するように見えます。これは理想的な状態ではありません。

4

1 に答える 1

0

わかりました、私はそれを理解したと思います。私のコンソールログは、私の .match ステートメントが一致を見つけられなかった場合、nullを返すというエラーを強調表示していたので、 null.length は無効でした。

そのため、最初の if ステートメントの外で .match 引数を使用し、代わりに次のような一連の if ステートメントを追加しました。

    // 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/

于 2013-07-19T11:35:33.570 に答える