我在脚本顶部声明了全局变量,如下所示
$(function(){
//Set button disabled
var macaddr_obj;});
我有一个ajax函数,如下所示
$('.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('');
}
},
});
});
当其他文本框中的keyup时,调用函数“check_item_row”
$('.item-ipaddr').live('keyup', function(){
var vNode = $(this);
var target = $(vNode).parents('tr');
check_item_row(target);
});
这是使用macaddr_obj
的功能var check_item_row = function(target)
{
alert(macaddr_obj.check);
}
我想使用macaddr_obj的值。我该怎么办?
答案 0 :(得分:1)
全局定义您的macaddr_obj:
var macaddr_obj;
$(function(){
//Set button disabled
...........
});
答案 1 :(得分:1)
您应该将check_item_row
函数声明放在$(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_obj
只会在触发至少一个ajax调用后才会初始化,并成功返回一个值。
如果您在之前致电check_item_row
,则会触发TypeError: macaddr_obj is undefined
。
避免这种情况的一种简单方法是使用默认值初始化对象:
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'