我有一些继承的代码导致Safari出现问题。
问题来自代码中的几行代码:
if ( ... && $("#element1").val().match(/regex/) && ...)
javascript本身是以编程方式生成的。
问题是有时候$(“#element1”)。val()返回null,我不能轻易地在它之前放置一个typeof检查,因为它需要将null视为空字符串。
最简单(也是可管理的)解决方案是创建一个nullmatch函数并调用它或者覆盖.match函数本身。然后,新函数首先检查null,如果为null,则将空字符串传递给匹配而不是null。
我不知道该如何做,或哪个最好。
答案 0 :(得分:1)
您可以使用||
运算符:
if ( ... && ($("#element1").val() || "").match(/regex/) && ...)
基本上,foo || ""
如果它是真实的话会返回foo
,如果foo
是假的false
,undefined
则返回空字符串, null
,空字符串,+0
,-0
或NaN
)。
答案 1 :(得分:1)
更换或添加它会更好(例如
$("element1").val().nullmatch(/regex/)
或$("element1").val().nullToEmpty().match(/regex/)
这实际上是不可能的,因为.nullmatch
或.nullToEmpty
需要是可能null
值的方法。
如果你真的想以这种方式写作,或者你的后端更容易生成,那么你可以编写一个迷你插件:
$.fn.valNullToEmpty = function() { return this.val() || ''; }
$("element1").valNullToEmpty().match(/regex/)
答案 2 :(得分:0)
怎么样......
function nullString(str) {
if (str === null) {
return "";
else {
return str;
}
所以你的if语句可以成为
if ( ... && nullString($("#element1").val()).match(/regex/) && ...)
答案 3 :(得分:0)
val()的jQuery文档声明,当元素被选中且没有选择任何选项时,它返回null。
因此使用valHooks可能有所帮助
var originalSelectHook;
if ($.valHooks.select) {
originalSelectHook = $.valHooks.select.get;
}
$.valHooks.select = {
get: function(elem) {
var index = elem.selectedIndex;
if (index == -1 || elem.options[index].disabled) {
return "";
}
else {
return originalSelectHook(elem)
}
};
Code假定select
存在一个钩子