我不确定我是否正确理解传递变量,因为这对我不起作用,结果是" 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>');
});
});
答案 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>');
});
});