如何从其他函数获取jquery变量?
我在脚本顶部声明全局变量,如下所示如何从其他函数获取jquery变量?,jquery,Jquery,我在脚本顶部声明全局变量,如下所示 $(function(){ //Set button disabled var macaddr_obj;}); $('.item-macaddr').live('keyup', function(){ var vNode = $(this); var target = $(vNode).parents('tr'); var macAddr = $(target)
$(function(){
//Set button disabled
var macaddr_obj;});
$('.item-macaddr').live('keyup', function(){
var vNode = $(this);
var target = $(vNode).parents('tr');
var macAddr = $(target).find('.item-macaddr').val();
$.ajax({
type: 'POST',
url: '" . Yii::app()->createUrl('workorders/check_mac_addr') . "&macAddr=' + macAddr,
success: function (data) {
macaddr_obj = JSON.parse(data);
if(macaddr_obj.check == 'true')
{
$(target).find('.mac-duplicate-error').text(macaddr_obj.msg);
$(target).find('.mac-duplicate-error').addClass('errorMessage');
$('#sites-form input[type=submit]').attr('disabled', 'disabled');
}else {
$(target).find('.mac-duplicate-error').text('');
}
},
});
});
我有一个ajax函数,如下所示
$(function(){
//Set button disabled
var macaddr_obj;});
$('.item-macaddr').live('keyup', function(){
var vNode = $(this);
var target = $(vNode).parents('tr');
var macAddr = $(target).find('.item-macaddr').val();
$.ajax({
type: 'POST',
url: '" . Yii::app()->createUrl('workorders/check_mac_addr') . "&macAddr=' + macAddr,
success: function (data) {
macaddr_obj = JSON.parse(data);
if(macaddr_obj.check == 'true')
{
$(target).find('.mac-duplicate-error').text(macaddr_obj.msg);
$(target).find('.mac-duplicate-error').addClass('errorMessage');
$('#sites-form input[type=submit]').attr('disabled', 'disabled');
}else {
$(target).find('.mac-duplicate-error').text('');
}
},
});
});
当在其他文本框上键入时,调用函数“check\u item\u row”
这是使用macaddr_obj的函数
var check_item_row = function(target)
{
alert(macaddr_obj.check);
}
我想使用macaddr_obj的值。我该怎么做?在全球范围内定义您的macaddr\u obj:
var macaddr_obj;
$(function(){
//Set button disabled
...........
});
您只需将
check\u item\u行
函数声明与handlers声明一起放入$(function(){…})
块中:
$(function(){
//Set button disabled
var macaddr_obj;
...
var check_item_row = function(target) {
alert(macaddr_obj.check);
}
...
// ".live()" is deprecated, use the following syntax with ".on()" :
$(document).on('keyup', '.item-macaddr', function(){
...
});
$(document).on('keyup', '.item-ipaddr', function(){
...
});
});
从代码中可以看出,macaddr\u obj
只有在至少触发一个ajax调用并成功返回值后才会初始化
如果在此之前调用check\u item\u row
,将触发TypeError:macaddr\u obj未定义
避免这种情况的一种简单方法是使用默认值初始化对象:
var macaddr_obj = {}; // 'macaddr_obj.check' will return 'undefined',
// which probably fits your needs
// or
var macaddr_obj = {check: false}; // 'macaddr_obj.check' will return 'false'
macaddr\u obj
实际上不是全局的。它是您的ready
处理程序的本地。macaddr\u obj
是它在其中声明的ready处理程序的本地从var macaddr\u obj中删除var
代码>声明。这将使其具有全局范围(尽管让变量全局可用并不是一个真正的好做法),因为您使用ajax请求来填充macaddr\u obj
无法保证在触发项ipaddr
键控时填充值您的当前代码是否触发错误?如果是,哪一个?