Ger Hayden Ответов: 1

Как я могу получить JavaScript на странице, чтобы огонь


На одной из моих страниц cshtml есть javascript, который не срабатывает, каждая функция имеет предупреждение в строке 1, чтобы показать, если она поражена, отладчик тоже не улавливает его.
Моя цель-проверить, что было введено правильно отформатированное электронное письмо. Две функции пытаются это сделать, третья-просто тестовая функция, чтобы попробовать простой вызов.

Источником здесь является продукт View source на firefox:
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>VT IdentityServer4</title>
    <link rel="icon" type="image/x-icon" href="/favicon.ico" />
    <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
    <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.css" />
    <link rel="stylesheet" href="/css/site.css" />
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container-fluid">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a href="/">
                    <span class="navbar-brand">
                        <img src="/icon.png" class="icon-banner">
                        IdentityServer4
                    </span>
                </a>
            </div>

        </div>
    </div>

    <div class="container body-content">
        <form action="/Account/ForgotPassword" enctype="multipart/form-data" method="post">    <div class="panel-body">
        <div class="bg-info p-2"><h4>Reset Password</h4></div>


        <div class="form-group">
            <label for="UserMaster_Email">Email</label>
            <input class="form-control" id="userEmail" type="text" name="UserMaster.Email" value="" />
        </div>


        <div>
            <h1> Click the button to send a  link  to the email address provided, please follow it to set a new password</h1>
        </div>
        <input id="returnUrl" name="returnUrl" type="hidden" value="/connect/authorize/callback?client_id=TestMVC&amp;redirect_uri=https%3A%2F%2Flocalhost%3A6001%2Fsignin-oidc&amp;response_type=code%20id_token&amp;scope=openid%20profile%20api1%20offline_access&amp;response_mode=form_post&amp;nonce=636971655198350102.NWE0NzZmOWEtY2M5OC00ZjY1LTgxZDQtYmRlYmFjM2Q4YzNiMDZlNGZlYTYtZmVmYS00OGQ0LWExYzUtYTQ1OGFjOTQxNWQ1&amp;state=CfDJ8PEC9PhnSjdGtGv-XdyPnE4sVD_NeakVMhCbPrEa2B0iSvRIlopzw-1Piyf5uqzjvHcBx5c-GyCRCHLxm5zQDgEmG4siDJ0bNev0l0c234qNcEIoo2NVebVdBjt6Aq_1pFx5dlTT0zCC_SQhpgD2j-Y6xdMaS-iRPbN6N8nRxpVajdjNbWSR76VLpa0R5aXQJyc1Fq2qi8i8V688UeUb303FMFodSfu_s95_V-0ck3Nj5OPSbTx6DfDugn5yiOvPJj_4Tj7T0DoHvHNCBY8gVr1Qw4ScdztkXaH5sjB8gpGo0dN3HVZd8CYrL0zMkW5qAm9aI1zA4At_36lL1iwbbRQ&amp;x-client-SKU=ID_NETSTANDARD2_0&amp;x-client-ver=5.3.0.0" />

        <div class="panel-footer">
            <div class="form-group">
                <button class="btn btn-primary" name="button" value="sendLink" id="sendLinkBtn" onclick="emailChanged()">Send Password Reset Link</button>
                <button class="btn btn-default" name="button" value="cancel" onclick="myFunction()">Cancel</button>
            </div>
        </div>
    </div>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8PEC9PhnSjdGtGv-XdyPnE6FpWkPfrGjWXYXJ-hIvJbveurwqgucguTju-4mETob6dBOzE0PnOGqCJEwE6JTkf7FqOo8thhm_3m5Uvh4tY8WhmH-rbeg0rzjAtIggwXp8dcE3NwKiehtMYWUaayKp0Y" /></form>
<script  type="text/javascript">
    function myFunction() {
//        var x = document.getElementById("userEmail").innerHTML = "Hello World";
        alert("The text has been changed3.");
    }
    function emailChanged() {
        alert("The text has been changed2.");
        var hasError = false;
        var emailReg = /^([\w-\.]+@([\w -] +\.)+[\w-]{2,4})?$/;

        var emailaddressVal = $("#UserMaster.Email").val();
        if (emailaddressVal == '') {
            $("#UserMaster.Email").after('<span class="error">Enter email address.</span>');
            hasError = true;
        }

        else if (!emailReg.test(emailaddressVal)) {
            $("#UserMaster.Email").after('<span class="error">Enter a valid email address.</span>');
            hasError = true;
        }

        if (hasError == true) { return false; }


    }
    $(document).ready(function () {

        $('#sendLinkBtn').click(function () {
            alert("The text has been changed1.");
            $(".error").hide();
            var hasError = false;
            var emailReg = /^([\w-\.]+@([\w -] +\.)+[\w-]{2,4})?$/;

            var emailaddressVal = $("#UserEmail").val();
            if (emailaddressVal == '') {
                $("#UserEmail").after('<span class="error">Enter email address.</span>');
                hasError = true;
            }

            else if (!emailReg.test(emailaddressVal)) {
                $("#UserEmail").after('<span class="error">Enter a valid email address.</span>');
                hasError = true;
            }

            if (hasError == true) { return false; }

        });
    });
</script>

    </div>

    <script src="/lib/jquery/jquery.js"></script>
    <script src="/lib/bootstrap/js/bootstrap.js"></script>
    
</body>
</html>

Обычно это не составляет труда. Есть какие-нибудь мысли о том, что я, возможно, пропустил

Что я уже пробовал:

Код, включенный в вопрос, показывает мои различные попытки, и вот один из онлайн-примеров, которым я следовал. https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onclick

Richard Deeming

Ваш скрипт полагается на jQuery, но jQuery не включается до тех пор, пока после ваш скрипт.

Попробуйте переместить jQuery includes над блоком скрипта.

1 Ответов

Рейтинг:
11

Afzaal Ahmad Zeeshan

Скорее всего ваш код должен потерпеть неудачу вокруг этой строки,

var emailaddressVal = $("#UserMaster.Email").val();
Но это требует, чтобы все остальное было в порядке, и консоль не показывает никаких "неопределенных" ошибок.
Цитата:
каждая функция имеет предупреждение в строке 1, чтобы показать, что если она поражена, то отладчик тоже не улавливает ее.
О боже, ты делаешь это неправильно. Используйте инструменты разработчика Chrome и устанавливайте точки останова в локальной среде, вместо того чтобы загрязнять код предупреждениями, которые вероятно переходите к производству. Если отладчик не попадает, это означает, что что-то не позволяет коду достичь этой точки, возможно, неправильное именование соединений между элементами и скриптами, или, возможно, что-то еще хуже.

И решение, как уже предложил Ричард, вам нужно переместить включение jQuery в ваш HTML DOM наверх—jQuery всегда идет как первый скрипт в DOM. Вот этот,
<script src="/lib/jquery/jquery.js"></script>
<script src="/lib/bootstrap/js/bootstrap.js"></script>
Кроме того, убедитесь, что вы загружаете все, что должно быть загружено, прежде чем выполнять какой-либо зависимый код, одним из таких кодов является $(document).ready(function () { }); код, проверь и это тоже.

Если код все еще не работает, ошибка будет напечатана в консоли, пожалуйста, поделитесь этим, чтобы быть точным о решении.


Ger Hayden

Спасибо Afzaal, много работать там. Это страница, на которую я прикрутил один из примеров сервера идентификации, и вызовы bootstrap / jquery выполняются автоматически.

Это последняя часть файла _layout.chstml:

@RenderBody()




@RenderSection("скрипты", обязательно: false)



Мой код сценария входил как часть тела, а не в раздел сценариев.

Я исправил это и уменьшил тело функции в каждом случае до просто предупреждения без успеха, и когда я помещаю его в chrome, я вижу эту ошибку:
Отказался выполнять встроенный скрипт, потому что он нарушает следующего содержания политики безопасности директива: "по умолчанию-src и самостоятельно''". Либо 'небезопасно-ключевое слово inline', хэш ('SHA256 хэш-UT3bVGIVpElFF57vLK9xLpaZaM/Mf01HLSt+X8TN2EA='), или извращенец ('во избежание...') является обязательным для включения встроенного выполнения. Обратите внимание также, что 'script-src' не был явно установлен, поэтому 'default-src' используется в качестве запасного варианта.

Вероятно, это будет завтра, но я перенесу сценарии в их собственный файл и посмотрю, как это будет происходить.