如果我对非现有元素ID使用$("#ElementId")。val(),这是一个问题吗?

时间:2016-01-05 17:27:16

标签: javascript jquery html

我的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将忽略该元素,如果它找不到它..所以任何人都可以认为这是一个可接受的行为,让脚本保持原样,所以即使该元素不存在,它将被脚本忽略不必担心......

3 个答案:

答案 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);