制作Javascript全局变量

时间:2013-05-29 03:29:21

标签: php javascript global var

我使用var函数创建变量,以便我可以在PHP中使用它所以我可以使用post函数,基本上我在javascript中导入它们。

无论如何我如何使它们成为全局变量?

我尝试将它们包含在document.ready函数中,甚至在代码开始执行document.ready函数之前。它更整洁,然后只是重复那些var。

这是代码

$(document).ready(function () {
    var user_login = $('#user_login').val();
    var user_pass = $('#pass_login').val();
    $('#field').keyup(function (e) {

        if (e.keyCode == 13) {

            //If enter is pressed vailidate the form
            e.preventDefault();
            $.ajax({

                url: 'ajax/check.php',
                type: 'post',
                data: {
                    user_login: user_login,
                    pass_login: user_pass
                },
                success: function (data) {
                    $('#content').html(data);
                }
            });
        };
    });

    $('#submit').click(function (e) {
        if (e.keyCode != 13) {


            $.ajax({

                url: 'ajax/check.php',
                type: 'post',
                data: {
                    user_login: user_login,
                    pass_login: user_pass
                },
                success: function (data) {
                    $('#content').html(data);
                }
            });
        }
    });

});

3 个答案:

答案 0 :(得分:0)

你可能不希望它们是全球性的,因为没有理由。现在编码时,只要文档准备就绪,变量将仅在用户在表单字段中输入任何内容之前评估一次。您希望在onkeyup处理程序或提交表单时评估它们,以便获得当前值。我不确定你的check.php是否有,但看起来应该是这样的:

$(function(){
   $('form#theform').submit(function(e){
      e.preventDefault();
      var  user_login = $('#user_login').val(),
           user_pass = $('#pass_login').val();
      // you ajax submit here

   });

   $('#field').keyup(function(e){
       e.preventDefault();
       var  user_login = $('#user_login').val(),
            user_pass = $('#pass_login').val();
       // do your validation, if successful then do: $('theform').trigger('submit');
   });
});

你不想在这里使用全局变量的原因是因为你总是需要最新的输入。如果您使用全局变量,则无法判断您是否拥有最新的输入,因为事情将会不同步。

答案 1 :(得分:0)

每次想要获取输入的当前值时,您需要在输入上调用.val()。如果您在开头只调用一次,那么当用户输入输入时,变量将不会保持最新。

做这样的事情:

$(document).ready(function() {
    // Make a function that returns the data, then call it whenever you
    // need the current values
    function getData() {
        return {
            user_login: $('#user_login').val(),
            user_pass: $('#pass_login').val()
        }
    }

    function check(e) {
        e.preventDefault();
        $.ajax({

            url: 'ajax/check.php',
            type: 'post',
            data: getData(), // get current values
            success: function (data) {
                $('#content').html(data);
            }
        });
    }

    // Don't repeat so much; use the same function for both handlers
    $('#field').keyup(function(e) {
        if (e.keyCode == 13) check(e);
    });

    $('#submit').click(function(e) {
        if (e.keyCode != 13) check(e);
    });

});

答案 2 :(得分:0)

全球可能不是去这里的方式。听起来你对减少重复代码更感兴趣?您可以将当前代码重构为:

$(document).ready(function () {
    function submitForm() {
        var user_login = $('#user_login').val();
        var user_pass = $('#pass_login').val();

        $.ajax({
            url: 'ajax/check.php',
            type: 'post',
            data: {
                user_login: user_login,
                pass_login: user_pass
            },
            success: function (data) {
                $('#content').html(data);
            }
        });
    }

    $('#field').keyup(function (e) {
        if (e.keyCode == 13) {
            //If enter is pressed vailidate the form
            e.preventDefault();
            submitForm();
        };
    });

    $('#submit').click(function (e) {
        if (e.keyCode != 13) {
            submitForm();
        }
    });
});