Оператор Javascript SWITCH не запускається

Я маю виписку з switch в моєму JavaScript у веб-застосунку ASP.NET C #. Я налагоджую це за допомогою FireBug, і він помиляється: як тільки він досяг switch , він існує негайно.

Ось код:

$(function() {

    $('#received_dateTextbox').mask("99/99/99");
    $('#report_dateTextBox').mask("99/99/99");
    $('#occurrence_dateTextBox').mask("99/99/99");

    //var checkValues='';

    $('table input:checkbox').click(function() {

        if ($(this).prop('checked')) {
            var checkText = $(this).next('a').text();
            var hrefValue = $(this).next('a').attr('href');
            var trimIndex = hrefValue.lastIndexOf('\\') + 1;
            var checkValue =  hrefValue.substr(trimIndex, hrefValue.indexOf("')",trimIndex)-trimIndex);

            //checkValues+=checkValue+";";

            switch(checkValue)
            {
                //preanalytical other
                case "21": 
                    var userInput = prompt("Other:", "Other:");
                    $(this).next('a').html('Other:' + '' + userInput + '');
                    checkValues+=checkValue+":"+userInput;
                break;

                //analytical other
                case "53": 
                    var userInput = prompt("Other:", "Other:");
                    $(this).next('a').html('Other:' + '' + userInput + '');
                    checkValues+=checkValue+":"+userInput;
                break;

                //postanalytical other
                case "89": 
                    var userInput = prompt("Other:", "Other:");
                    $(this).next('a').html('Other:' + '' + userInput + '');
                    checkValues+=checkValue+":"+userInput;
                break;

                //other other
                case "95": 
                    var userInput = prompt("Other:", "Other:");
                    $(this).next('a').html('Other:' + '' + userInput + '');
                    checkValues+=checkValue+":"+userInput;
                break;

                //analytical liquid handler instrument failure
                case "40":
                    var userInput = prompt("Liquid Handler#:", "Liquid Handler#:");
                    $(this).next('a').html('Liquid Handler#:' + '' + userInput + '');
                    checkValues+=checkValue+":"+userInput;
                break;

                //analytical olympus instrument failure
                case "41":                   
                    var userInput = prompt("Olympus#:", "Olympus#:");
                    $(this).next('a').html('Olympus#:' + '' + userInput + '');
                    checkValues+=checkValue+":"+userInput;
                break;

                //analytical lcms instrument failure
                case "42":
                    var userInput = prompt("LC-MS/MS#:", "LC-MS/MS#:");
                    $(this).next('a').html('LC-MS/MS#:' + '' + userInput + '');
                    checkValues+=checkValue+":"+userInput;
                break;

                //analytical liquid handler delay prod
                case "49":
                    var userInput = prompt("Liquid Handler#:", "Liquid Handler#:");
                    $(this).next('a').html('Liquid Handler#:' + '' + userInput + '');
                    checkValues+=checkValue+":"+userInput;
                break;

                //analytical olympus delay prod
                case "50":
                     var userInput = prompt("Olympus#:", "Olympus#:");
                    $(this).next('a').html('Olympus#:' + '' + userInput + '');
                    checkValues+=checkValue+":"+userInput;
                break;

                //analytical lcms delay prod
                case "51":
                    var userInput = prompt("LC-MS/MS#:", "LC-MS/MS#:");
                    $(this).next('a').html('LC-MS/MS#:' + '' + userInput + '');
                    checkValues+=checkValue+":"+userInput;
                break;

                //wrong practice code
                case "63":
                    if (confirm("Do you want to check Report Sent to Wrong Location/Physician?"))
                    { var elNode = document.getElementById("TreeView1n82CheckBox");
                        $(elNode).prop("checked", true);
                     }
                    else
                    { var elNode = document.getElementById("TreeView1n81CheckBox");
                        $(elNode).prop("checked", false);
                    }

                break;  

                default: 
                    alert('no match');                
            }
        }
    });
    //document.getElementById('HiddenField1').value = checkValues;
});

Відладчик показав мені, що checkValue , безумовно, має значення

Що я роблю неправильно?

3
@marc так, у нього є цінність, для якої я поставив
додано Автор l--'''''&#, джерело
@marc так з'являється попередження
додано Автор l--'''''&#, джерело
@pimvdb так, я розмістив решту мого коду
додано Автор l--'''''&#, джерело
@ Марк чи я неправильно оголошую checkValue? чи повинен бути рядок замість var?
додано Автор l--'''''&#, джерело
@marc зрозумів, але він не працює для значень, яким він повинен працювати, наприклад, 95 або 63
додано Автор l--'''''&#, джерело
Немає помилок? Ви дійсно завершили оператор switch в своєму реальному коді?
додано Автор pimvdb, джерело
Але чи має він одне з значень, які ви маєте для case ? Якщо ви додаєте default: alert ('no match'); до вашого перемикача, чи з'являється сповіщення?
додано Автор Marc B, джерело
Переконайтеся, що в ньому немає прихованих просторів та безлічі. 63 ніколи не відповідати 63 .
додано Автор Marc B, джерело
Ні, але якщо контрольна вартість становить "503", то ваш перемикач не збігатиметься, оскільки немае значення case 503 .
додано Автор Marc B, джерело
Якщо сповіщення з'явиться, то ні один з ваших значень case не відповідає.
додано Автор Marc B, джерело

3 Відповіді

checkValue could be stored as a number, not a string as all the "case" check for.

Перевірте, чи працює case parseInt ("95"): ... .

Також перевірте, чи починають працювати ваші справи, якщо ви додаєте символ до номера, а потім перевірте це:

switch (checkValue + 'A')

and then case "53A": .... break;

2
додано
дякую вам дуже великий шабба!
додано Автор l--'''''&#, джерело
російський на допомогу !!! Як мені визначити checkValue?
додано Автор l--'''''&#, джерело
Ви спробували попередження (checkValue); прямо перед switch() - значення OK?
додано Автор Leon, джерело
@Tom: checkvalue не рядок, це насправді число (!). Див тестовий код зразка: jsfiddle.net/3MXtM
додано Автор Leon, джерело
@lttlrck: substr, ймовірно, повертає рядок, але оскільки цей рядок виглядає як число (тобто всі цифри), движок JS може зробити щось фанкове. JS не сильно набирається.
додано Автор Leon, джерело
Я не розумію - checkValue, очевидно, є рядком.
додано Автор Tom, джерело
Чому б substr повертати номер?
додано Автор hplbsh, джерело
@ Leon Ваш код зразка несправний; isNaN() примусить рядок до числа, якщо це можливо, це не доводить примітиву. Правильний тест тут: jsfiddle.net/Trmjt/1 , і це показує, що це String.
додано Автор hplbsh, джерело
Зауважте також, що JS-комутатор використовує ===, щоб він не примушувався до різних типів. Тому, якщо substr повертає рядок, код, як показано, повинен працювати, якщо вхід правильний.
додано Автор hplbsh, джерело

Не впевнений у точності поведінки, але якщо checkValues ​​ є нульовим або невизначеним, я б очікував, що він розбитиметься на цю лінію.

0
додано
це визначено вище var checkValues ​​= '';
додано Автор l--'''''&#, джерело
Я видалив це зовсім такий же результат
додано Автор l--'''''&#, джерело

Можливо, у checkValue є пробіл у ньому, який потрібно обробити? У своєму default - покажіть значення checkValue , як це, що має зробити це більш чітким:

default: 
     alert('no match for "' + checkValue + '"');
0
додано
Я просто пробував це. він РОБОТИ спеціально для не матчів, однак, якщо Є збіг, то він не йде в "футляр"
додано Автор l--'''''&#, джерело
Я перевірив це. це точно "95" або "63" тощо
додано Автор l--'''''&#, джерело
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram