未捕获引用错误:未定义问题

Uncaught ReferenceError: questions is not defined

本文关键字:未定义 问题 错误 引用      更新时间:2023-09-26

我得到了Uncaught ReferenceError:在其他函数中使用全局变量时,问题未定义错误。

JavaScript代码:

$(function() {
    var dialog,total_que=0;
    var questions = { name:{}, type:{}, options:{}}
    function addQuestion() {
        var que = new Array();
        var option = new Array();
        var new_element_label;
        var new_element = "";
        var i=0;
        form_fields = form[0].elements.length;
        if(form_fields<=2){
            que['name'] = form[0].elements[0].value;
            que['type']  = form[0].elements[1].value;
        }
        else
        {
            que['name'] = form[0].elements[0].value;
            que['type']  = form[0].elements[1].value;
            for(i=0;i<(form_fields-3);i++){
                option[i] = form[0].elements[i+3].value;
            }
        }
        switch(que['type']){
        case 'text':
            var new_element = '<input type="text" name="name" placeholder="'+que['name']+'">';
            break;
        default:
            break;
        }
        new_element_label = '<label for="name">'+que['name']+'</label><br>';
        new_element_label += '<div for="text">';
        new_element += '</div>';
        $('#add_polling_form fieldset').append("<br>"+new_element_label+new_element);
        dialog.dialog( "close" );
        form[0].reset();
        questions['name'][total_que] = que['name'];
        questions['type'][total_que] = que['type'];
        questions['options'][total_que] = option;
        total_que++;
        console.log(questions);
    }
    console.log(questions);
    dialog = $("#dialog-form" ).dialog({
        autoOpen: false,
        height: 300,
        width: 350,
        modal: true,
        buttons: {
            "Add Question": addQuestion,
            Cancel: function() {
                $('#que_option_val').html('');
                dialog.dialog( "close" );
                form[0].reset();
            }
        },
        close: function() {
            $('#que_option_val').html('');
            dialog.dialog( "close" );
            form[0].reset();
        }
    });
    form = dialog.find( "form" ).on("submit", function( event ) {
        event.preventDefault();
    });
    $( "#create-user" ).button().on( "click", function() {
        dialog.dialog( "open" );
    });
});
function add_que_option(que_type){
    var que_type = que_type;
    switch(que_type){
    case 'text':
        $('#que_option_val').html('');
        break;
    default:
        $('#que_option_val').html('<input type="button" class="ui-button" value="Add More      Option" onclick="add_option();">')
        $('#que_option_val').append("<input type='text' placeholder='Option for Question'>");
    }
}
function add_option(){
    $('#que_option_val').append("<input type='text' placeholder='Option for Question'>");
}
function save_form(){
    console.log(questions);
}

当我调用addQuestion()函数时,值被插入到选项数组中。但当我调用save_form()时,它会在控制台中给我这样的错误。

Uncaught ReferenceError: questions is not defined 
 save_form 
 onclick

变量questions是位于顶部$(...)调用内部的匿名函数的本地变量。save_form()是在该函数之外定义的,因此这些局部变量对它来说都不可见

您应该将save_form移到$(function() { ... }内部,或者将questions的声明移到它外部。