我的asp.net mvc web应用程序中有以下脚本: -
$("body").on('click', '#DCSort', function () {
$.ajax({
type: "Get",
url: Path,
data: { searchTerm: $("#HsearchTerm").val(), page: "1", sort: $("#HDCSortPam").val(), pagesize: $("#FilterSize").val(), activefilter: $("#FilterActive").val() },
success: successFunc,
error: errorFunc
});
function successFunc(data, status) {
$(TargetTable).html(data);
$(DCProgressSort).hide();
}
function errorFunc() {
alert('error');
}
})
现在这是一个在我的Web应用程序中使用的通用脚本,因此在某些网页上,它们没有传递的数据中包含的所有传递参数;
$("#HsearchTerm").val()
,$("#HDCSortPam").val()
,$("#FilterSize").val()
,$("#FilterActive").val()
现在,当我第一次部署脚本时,如果脚本尝试在非现有元素上使用.val(),脚本会引发错误,例如" FilterActive未定义& #34; ..但似乎javascript将忽略该元素,如果它找不到它..所以任何人都可以认为这是一个可接受的行为,让脚本保持原样,所以即使该元素不存在,它将被脚本忽略不必担心......
答案 0 :(得分:3)
jQuery会很好地处理它。例如,考虑选择器#HsearchTerm
。假设没有与选择器匹配的元素,$("#HsearchTerm")
将是一个空的jQuery对象,而$("#HsearchTerm").val()
将是undefined
(尽管没有错误)。
$.ajax
将忽略data
对象中具有undefined
值的键,因此结果将是searchTerm
将被排除在查询字符串之外ajax请求。
假设你总是可以跳过检查存在是不安全的。通常,如果您尝试访问undefined
的属性,JavaScript将引发错误,因此$("#HsearchTerm").val().length
之类的内容会引发错误。检查选择器是否有匹配项的常用方法是检查集合的length:$("#HsearchTerm").length
如果没有匹配则为0
。
答案 1 :(得分:0)
可以使用.is()
,AND
&&
,OR
||
,如果{{{}}中不存在元素,则返回空字符串或false
1}}
DOM
var check = function(el) { return el.is("*") && el.val() || "" };
答案 2 :(得分:-1)
为什么不试试看?大多数浏览器在其URL栏中支持运行时javascript,并且大多数站点已经链接了jQuery:
javascript: var x=$("#some-non-existient-element").val();alert("Type: " + typeof x + " Val: " + x);
// The search bar of StackOverflow:
javascript: var x=$("#search input").val();alert("Type: " + typeof x + " Val: " + x);