jquery函数不传递变量

时间:2015-07-15 20:59:57

标签: javascript jquery

我不确定我是否正确理解传递变量,因为这对我不起作用,结果是" null"

/********************************
/ QUICK SEARCH FUNCTIONS
/*******************************/
$(function () {

    var id = null;
    var name = null;
    var label = null;

    function searchSelect() {
        $('.dropdown-menu > li > a').on("click", function() {
            $('.dropdown-toggle').html($(this).text() + ' <span class="caret"></span>');
            $('#input-tag').attr('placeholder', $(this).text());
            var id = $(this).data('name');
            var name = $(this).data('name');
            var label = $(this).data('label');
    });
    }searchSelect();

    $('#add-tag').on("click", function() {
        $('#tag-results').append('<input id="'+ id +'" type="hidden" name="' + name +'" value="test" />');
        $('#tag-results').append('<div class="tag">'+label+'<button type="button" class="close" data-dismiss="alert"><i class="fa fa-remove"></i></button></div>');
    });

});

2 个答案:

答案 0 :(得分:1)

在searchSelect内部,当您为vars id,name和label赋值时,使用前缀'var',您将私有地将这些变量重新声明为函数范围。

在searchSelect函数中分配变量id,name和label的值时,请删除前缀'var',这样可以解决您的问题。

答案 1 :(得分:0)

为了不声明新变量,您需要删除var内的searchSelect()声明,否则不会覆盖此函数之外的变量。

像这样:

$(function () {

    var id = null;
    var name = null;
    var label = null;

    function searchSelect() {
        $('.dropdown-menu > li > a').on("click", function() {
            $('.dropdown-toggle').html($(this).text() + ' <span class="caret"></span>');
            $('#input-tag').attr('placeholder', $(this).text());

            // These will now override the variables declared outside the function
            // If using the keyword 'var' in front of these you are instead
            // creating local variables that won't be accessible
            // from outside of the function scope
            id = $(this).data('name');
            name = $(this).data('name');
            label = $(this).data('label');
    });
    }searchSelect();

    $('#add-tag').on("click", function() {
        $('#tag-results').append('<input id="'+ id +'" type="hidden" name="' + name +'" value="test" />');
        $('#tag-results').append('<div class="tag">'+label+'<button type="button" class="close" data-dismiss="alert"><i class="fa fa-remove"></i></button></div>');
    });

});