今天一个ajax请求发生错误,原因是一个参数没有得到值,比如
var three_id = $("#three_id").val();
firefox下显示这一行typeof $() null,页面上也没有id为three_id的选择器,于是报错了。
我用
if($("#three_id").length>0){
var three_id = $("#three_id").val();
}
这样进行了判断,如果有这个id选择器就执行这一句,结果页面上没有这个id还是执行这一句,于是报错了。
当页面上存在这个id选择器的时候,就是正常的,这个#three_id 是动态生成的。
后来我不得不这样做才解决问题:
try{
var three_id = $("#three_id").val();
}catch(e){
}
WHY?
1
oott123 2015-04-07 20:58:30 +08:00 via Android
$("#three_id") 都是 null 了,哪里来的 $("#three_id").length 呀…
你直接 if $("#three_id") 就好了。 |
2
young 2015-04-07 21:01:49 +08:00
都用jquery, 为啥不用 $("#three_id").size()
|
5
oott123 2015-04-07 21:18:02 +08:00
@tanteng 没有,理所当然的想的。
当然你这么一问我就去试了,$('#three_id') 并不是 null ,也是存在 length 属性的,而且 length 也确实为 0。 所以我想,也许是你描述中 “firefox下显示这一行typeof $() null” 的描述不准确。我是根据你的描述中的 null 回复的。 |
6
oott123 2015-04-07 21:19:31 +08:00
而且我测试的时候,当页面上不存在 id 为 a 的元素的时候, $('#a').val() 并不会报错而是返回 undefined。
|
7
gamexg 2015-04-07 21:54:25 +08:00
if ($("aaaaaaaaaaa")){console.log("a")}
a undefined if ($("aaaaaaaaaaa").size()){console.log("a")} undefined $("aaaaaaaaaaa").size() 0 if ($("a").size()){console.log("a")} a undefined $("aaaaaaaaaaa") [] |
8
gamexg 2015-04-07 21:57:05 +08:00
$("aaaaaaaa").length
0 if($("aaaaaaaa").length){console.log("a")} undefined if($("a").length){console.log("a")} a undefined if($("a").length>0){console.log("a")} a undefined if($("aaaaaaaa").length>0){console.log("a")} undefined length 也正常啊。 |
9
Sin 2015-04-07 22:18:21 +08:00
$.fn.jquery 判断下页面上有没有 jQuery ? jQuery $("#div") 不可能为 null 的
这个 $ 应该是 firebug 自带的那个选择器 |
10
kifile 2015-04-07 22:21:54 +08:00
同一个页面中的标签id难道不应该唯一吗?怎么会出现用length判断
|
11
shyangs 2015-04-07 22:31:34 +08:00
|
12
belin520 2015-04-07 22:36:56 +08:00 via Android
[0]
|
13
FrankFang128 2015-04-07 22:38:05 +08:00 via Android
你们再这样学前端估计会学出毛病。
Google不会哦? |
15
jugelizi 2015-04-07 22:43:01 +08:00
无语了,除了select不能length而已
|
16
SoloCompany 2015-04-07 22:57:39 +08:00
你确认 $ 符号仍然是 jquery?
这样简单的问题还难调试吗,麻烦你在怀疑的地方加个 console.log($ === jQuery) 九成九 $ 符号已经被重新定义过了 |
17
Sivan 2015-04-07 22:58:08 +08:00
只要 `if ($("#div").length) { }` 就行了,不需要 `> 0`
|
18
tanteng OP @SoloCompany 不是的,所有取值都是用得$("#div").val(),这是可能没有div这个id
|
19
SoloCompany 2015-04-07 23:28:36 +08:00
@tanteng 无论选择结果是什么,jQ 的选择器一定不会返回 null 或 undefined,而是一个 wrapper,所以,如果你在 firefox 上看到这样的错误 typeof $() null 那么我基本上可以打包票,这个 $ 和 jQuery 一定不是同一个标识符,你自己好好查吧
|
20
Lysora 2015-04-08 00:20:28 +08:00
@SoloCompany 是的,jQuery 的元素选择只要不是 Unrecognized Expression(比如只写一个单引号) 是不会报异常的,只要不报异常,都会返回一个 Wrapper,也就是所谓的 jQuery 对象,它具有 jQuery 自身扩展出来的大部分属性和方法,比如 length, size(),且值都大于 0。选择返回的结果并不是一个数组。jQuery( selector )[idx] 返回的才是原生 DOM 对象,可直接用做 if 的条件。
|
21
NCE 2015-04-08 08:51:38 +08:00
jq 版本问题吧lz,以前$('').length是可以的
|
22
iyaozhen 2015-04-08 13:46:45 +08:00
楼主能否说一下 jquery 的版本。这样 if($("#three_id").length>0) 应该是没错的。
|
23
IamJ 2015-04-09 20:28:18 +08:00 via Android
一直用
if ($('#abc')[0]) |