39189


標題の件、予め、数値のみの入力制御、カンマ表示、フォーカス時の数値表示化を施したテキスト枠があります。（以下要領で）

[code]

    $("input[name=amount]").on({
        "keydown": function(e) {
            var k = e.keyCode;
            if (!((k >= 48 && k <= 57) || (k >= 96 && k <= 105) || k == 32 || k == 8 || k == 9 || k == 46 || k == 39 || k == 37)) {
                return false;
            }
        },
                "blur": function() {
            var num = $(this).val();
            num = num.replace(/(\d)(?=(\d\d\d)+$)/g, "$1,");
            $(this).val(num);
                },
                "focus": function() {
            var num = $(this).val();
            num = num.replace(/,/g, "");
            $(this).val(num);
        }
    });
    
[/code]

こちらの枠の内容がクリアされた際、近隣のラベル要素に表示された内容も自動でクリアされるようコーディングしているつもりですが、作用してくれません。  
(数量の入力枠をクリアしたら、単価表示をクリア、ということを達成したいです)

当該枠に関わる動作が全く制御できていないわけではありません。  
検知できている条件式と、検知できていない条件式があるようです、  
以下Blurイベント内の、動作できている部分、動作できていない部分をコメントで記載しています。

[code]

    //数量のテキストボックスからフォーカスが外れたら
    $("input[name=amount]").on("blur",function() {
        //０の入力は拒む　⇒【動作ＯＫ】
        if ($(this).val() == 0) {
            $(this).val("");
            return false;
        }
        //TD要素まで遡り、下方向にテキスト要素・ラベル要素を取得。
        //指数指定で、品名コード枠と原価単価枠のラベルを捉える。
        var input = $(this).parent().parent().find("input");    //品名コード枠
        var maker_val = input.eq(0).val();
        var label = $(this).parent().parent().find("label");    //原価単価枠
    
        //品名コード枠の入力が先行されている必要あり　⇒【動作ＯＫ】
        if (maker_val == "" && $(this).val() != "") {
            $(this).val("");
            return false;
        }
        //数量枠をクリアされたら、単価表示をクリア　⇒******【動作できない】*******
        if (maker_val != "" && $(this).val() == "") {
            alert("***なんで***"); // 『表示もされない』
            label.eq(3).html("");
            return false;
        }
        //品名コード枠の入力と数量枠が１以上の入力で、単価を表示　⇒【動作ＯＫ】
        if (maker_val != "" && $(this).val() != "") {
            $.ajax({
                url: "cdcostget.php",
                type: "POST",
                dataType: "json",
                data: {
                    maker_no: maker_val,
                    maker_no2 : costGetYM()
                }
            })
        以下　省略
    
[/code]

====質問====  
上記コーディング内の******【動作できない】******と記載した部分は、  
なぜキーボード（DELETE・BackSpaceキー）で内容をてクリアが達成されても、働いてくれないのでしょうか？（.val()==""では聞き方が間違っているのでしょうか、それとも何か残っているのでしょうか？）

大変初歩的な質問と思われますが、何卒よろしくお願い申し上げます。


CC BY-SA 3.0
2017-10-31T13:31:27.230
39183
2017-10-31T23:08:33.807
25696
question
javascript jquery
内容がクリアされたテキスト枠の検知を達成したいができない


>
[code]

>     //０の入力は拒む　⇒【動作ＯＫ】
>     if ($(this).val() == 0) {
>         $(this).val("");
>         return false;
>     }
>  
[/code]

JavaScriptでは `"" == 0` は `true` と評価されるため、当該`input`が空の場合にここで終了します。  
文字列`0`と比較したいのであれば `$(this).val() == "0"` とすべきです。


CC BY-SA 3.0
2017-10-31T23:08:33.807
39189
2017-10-31T23:08:33.807
4236
39183
answer