Javascript 如何控制元素不出错?

Javascript 如何控制元素不出错?,javascript,jquery,Javascript,Jquery,当我从输入中删除数据其他占位符属性时,代码给了我一个错误:如下所示: “消息”:“未捕获的TypeError:无法读取的属性'length' 未定义“ 我在jquery插件后面有一个if语句的控件,如果你看 (函数($){ “严格使用”; $.fn.Placeholder打字机=功能(选项){ //插件设置 变量设置=$.extend({ 延误:50, 暂停:1000, 案文:[], 循环:正确 },选项); //在占位符中键入给定字符串 函数类型字符串($target、index、curs

当我从输入中删除
数据其他占位符
属性时,代码给了我一个错误:如下所示:

“消息”:“未捕获的TypeError:无法读取的属性'length' 未定义“

我在jquery插件后面有一个if语句的控件,如果你看


(函数($){
“严格使用”;
$.fn.Placeholder打字机=功能(选项){
//插件设置
变量设置=$.extend({
延误:50,
暂停:1000,
案文:[],
循环:正确
},选项);
//在占位符中键入给定字符串
函数类型字符串($target、index、cursorPosition、callback){
//获取文本
var text=settings.text[index];
//获取占位符,键入下一个字符
变量占位符=$target.attr('placeholder');
$target.attr('placeholder',placeholder+text[cursorPosition]);
//键入下一个字符
if(光标位置1){
setTimeout(函数(){
deleteString($target,callback)
},设置。延迟);
返回true;
}
//如果动画完成,则回调
回调();
}
//循环类型动画
函数循环类型($target,index){
//清除占位符
$target.attr('占位符','');
//类型字符串
typeString($target,index,0,function(){
//上标
指数=指数+1;
//如果循环为false,只需在数组中运行一次
if(index==settings.text.length&&!settings.loop){
返回false;
}
//删除字符串前暂停
setTimeout(函数(){
//删除字符串
deleteString($target,function()){
//开始循环
循环键入($target,索引%settings.text.length)
})
},设置。暂停);
})
}
//在每个给定字段上运行占位符打字机
返回此值。每个(函数(){
loopTyping($(this),0);
});
};
}(jQuery));
$(函数(){
var placeTarget=$(“.search hotels”),
dataValue=placeTarget.attr(“占位符”),
getPlaceholder=placeTarget.data(“其他占位符”);
如果(getPlaceholder.length>0 | | getPlaceholder!==未定义){
var splitData=getPlaceholder.split(“|”),
targetText=[dataValue];
变量占位符文本=拆分数据;
如果((数据值==“”)| |(数据值==未定义)){
placeTarget.Placeholder打字机({
文本:占位符文本,
延误:70,
循环:false,
});
}否则{
placeTarget.Placeholder打字机({
文本:targetText,
延误:70,
循环:false,
});
}
}
});
输入{
填充:12px;
边框:3px实心#ccc;
保证金:30像素自动;
显示:块;
宽度:50%;
}

两个问题:

  • getPlaceholder!==未定义的
    不检查值是否为数组
  • 您必须检查两个条件是否都满足,如果第一个条件不满足,则第二个条件不被计算
  • 
    (函数($){
    “严格使用”;
    $.fn.Placeholder打字机=功能(选项){
    //插件设置
    变量设置=$.extend({
    延误:50,
    暂停:1000,
    案文:[],
    循环:正确
    },选项);
    //在占位符中键入给定字符串
    函数类型字符串($target、index、cursorPosition、callback){
    //获取文本
    var text=settings.text[index];
    //获取占位符,键入下一个字符
    变量占位符=$target.attr('placeholder');
    $target.attr('placeholder',placeholder+text[cursorPosition]);
    //键入下一个字符
    if(光标位置1){
    setTimeout(函数(){
    deleteString($target,callback)
    },设置。延迟);
    返回true;
    }
    //如果动画完成,则回调
    回调();
    }
    //循环类型动画
    函数循环类型($target,index){
    //清除占位符
    $target.attr('占位符','');
    //类型字符串
    typeString($target,index,0,function(){
    //上标
    指数=指数+1;
    //如果循环为false,只需在数组中运行一次
    if(index==settings.text.length&&!settings.loop){
    返回false;
    }
    //删除字符串前暂停
    setTimeout(函数(){
    //删除字符串
    deleteString($target,function()){
    //开始循环
    循环键入($target,索引%settings.text.length)
    })
    },设置。暂停);
    })
    }
    //在每个给定字段上运行占位符打字机
    返回此值。每个(函数(){
    loopTyping($(this),0);
    });
    };
    }(jQuery));
    $(函数(){
    var placeTarget=$(“.search hotels”),
    dat