简体   繁体   English

只有我的else if和else语句得到评估,而我的if语句没有

[英]only my else if and else statements get evaluated, my if statement not

I am making 2 buttons, one should be a white theme, one should be a black theme, these will be send to my database. 我正在制作2个按钮,一个应该是白色主题,一个应该是黑色主题,这些将发送到我的数据库中。 However when it should evaluate my if statement and execute the part inside the curly braces, it throws in an error "Uncaught ReferenceError: data is not defined". 但是,当它应该评估我的if语句并在花括号内执行该部分时,会引发错误“未捕获的ReferenceError:未定义数据”。

I have already used console.log(), and everything seems to be working. 我已经使用过console.log(),并且一切似乎都正常。 I have looked up other problems related to if/else if/else statements not working etc. but none of them were useful (to me). 我查找了其他与if / else if / else语句不起作用等有关的问题,但是对我来说,这些问题都不有用。

How the buttons are created: 如何创建按钮:

function whiteOrDarkTheme(id, value, text, classColor, tracker) {
let a = ($('<a/>', {
    class: classColor + ' blackOrWhiteThemeBtns',
    id: id,
    value: value
})).text(text).on('click', function() {
    if ($(this).attr('id') === 'darkTheme') {

            $('#whiteTheme').val('NotChosen');
            $(this).val('#282c34');
            console.log($(this).val());
            console.log($('#whiteTheme').val());

    } else if ($(this).attr('id') === 'whiteTheme') {

            $('#darkTheme').val('NotChosen');
            $(this).val('#ffff');
            console.log($(this).val());
            console.log($('#darkTheme').val());
    }
});
return a;
}

How my ajax call looks like: 我的ajax调用看起来如何:

function registerCall() {
$('#signup').submit(function(event) {
    event.preventDefault();
    let loginName = $('#registerInput').val();
    let userName = $('#userName').val();
    let pwd = $('#registerPWD').val();
    let confirmPWD = $('#confirmPWD').val();
    let submit = $('#registerBtn').val();
    let backgroundChooser = $('#backgroundChooser').val();
    let whiteTheme = $('#whiteTheme').val();
    let darkTheme = $('#darkTheme').val();

    if (whiteTheme === 'NotChosen') {
            let data = {
                    loginName: loginName,
                    userName: userName,
                    pwd: pwd,
                    confirmPWD: confirmPWD,
                    theme: darkTheme,
                    submit: submit
                }
        } else if (darkTheme === 'NotChosen') {
             data = {
                loginName: loginName,
                userName: userName,
                pwd: pwd,
                confirmPWD: confirmPWD,
                theme: whiteTheme,
                submit: submit
            }   
        } else {
             data = {
                loginName: loginName,
                userName: userName,
                pwd: pwd,
                confirmPWD: confirmPWD,
                theme: '#ffff',
                submit: submit
            }               
        }
        console.log(data.theme);

    $.ajax({
        url: 'signup.php',
        type: 'POST',
        data: data,
        success: function(response) {

        }
    });
});
}

The part I bump into: 我碰到的部分:

    if (whiteTheme === 'NotChosen') {
            let data = {
                    loginName: loginName,
                    userName: userName,
                    pwd: pwd,
                    confirmPWD: confirmPWD,
                    theme: darkTheme,
                    submit: submit
                }
        }

I believe this is an issue with lexical scope . 我认为这是一个词汇范围问题。 Your defining the variable data within the first if block, but then using it outside of that block when making a request. 您在第一个if块内定义变量data ,然后在发出请求时在该块外使用变量data

 if (whiteTheme === 'NotChosen') {
            let data = {
                    loginName: loginName,
                    userName: userName,
                    pwd: pwd,
                    confirmPWD: confirmPWD,
                    theme: darkTheme,
                    submit: submit
                }
        }

I would recommend moving the declaration of data to be above your if block, like: 我建议将data声明移到您的if块上方,例如:

...
let whiteTheme = $('#whiteTheme').val();
let darkTheme = $('#darkTheme').val();
let data;

if (whiteTheme === 'NotChosen') {
    data = { ...

Michael Camden is right - it's to do with scope, I'd simplify your code 迈克尔·卡姆登(Michael Camden)是对的-与范围有关,我将简化您的代码

function registerCall() {
    $('#signup').submit(function(event) {
        event.preventDefault();
        let loginName = $('#registerInput').val();
        let userName = $('#userName').val();
        let pwd = $('#registerPWD').val();
        let confirmPWD = $('#confirmPWD').val();
        let submit = $('#registerBtn').val();
        let backgroundChooser = $('#backgroundChooser').val();
        let whiteTheme = $('#whiteTheme').val();
        let darkTheme = $('#darkTheme').val();

        let data = {
            loginName: loginName,
            userName: userName,
            pwd: pwd,
            confirmPWD: confirmPWD,
            submit: submit
            theme : '#ffff'
        }

        if (whiteTheme === 'NotChosen') {
            data.theme = darkTheme;

        } else if (darkTheme === 'NotChosen') {
            data.theme = whiteTheme;

        }

        console.log(data.theme);

        $.ajax({
            url: 'signup.php',
            type: 'POST',
            data: data,
            success: function(response) {}

        });

    });

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM