我有一个元素可以存在:
map2.html
或
webbrowser
和我的代码需要知道该值是否存在以及该值是什么。我的代码可以在下面工作,但是由于我对元素进行了两次调用而感到困惑,对改进下面的代码有什么建议吗?
<input type="hidden" name="simple_search_criteria" id="simple_search_criteria" value="" />
我喜欢下面的代码,但是由于<input type="hidden" name="simple_search_criteria" id="simple_search_criteria"/>
在两种情况下都返回一个空字符串,所以它不起作用...
if ($('#simple_search_criteria').attr('value') !== undefined) {
var searchCriteria = $('#simple_search_criteria').val();
// Do stuff with searchCriteria, even if it is an empty string
}
任何改进将不胜感激,我一直在努力改善自己的js!
答案 0 :(得分:3)
使用常规JavaScript会更快。尝试hasAttribute和getElementById
var searchCriteria = document.getElementById('simple_search_criteria').hasAttribute('value');
答案 1 :(得分:1)
这个想法是要检查val()是否返回任何东西,如果是,则检查是否不存在空值。
要回复评论(已删除),例如,如果元素(此处对应于$('#simple_search_criteria')
)不存在,则typeof将返回“ undefined”。 typeof的文档也可能有用。您可以看看here。
var searchCriteria = $('#simple_search_criteria').val();
if (typeof(searchCriteria) !== 'undefined' and searchCriteria.length > 0) {
// do stuff with searchCriteria
}
答案 2 :(得分:1)
我不知道是否有一个用于检查属性是否存在的jquery助手,但是javascript本身具有hasAttribute方法。
bool Button::longPush(unsigned long interval){
// ^^^^^^^^
答案 3 :(得分:1)
在这种情况下,您可以使用typeof
属性来区分未定义字符串和空字符串:
typeof(document.getElementById("simple_search_criteria"))==='string';
更多详细信息here
答案 4 :(得分:1)
input
元素始终具有一个值,即使在标记中省略了其value
属性,这也就是为什么.val()
不能区分是否存在带有空值,并且缺少属性。至关重要的是,在两种情况下,您的表单都将使用相同的simple_search_criteria=
(空字符串)数据提交,因此接收表单提交的服务器将无法区分两者。设计表单时,您需要牢记这一点。如果要忽略此参数,则需要完全忽略此特定的input
元素,而不仅仅是其value
属性。
但是,如果希望应用程序根据属性的存在或不存在来运行,则需要直接检查该属性。您可以通过将选择器缓存在单独的变量中来节省一些开销:
var searchCriteriaInput = $('#simple_search_criteria');
if (searchCriteriaInput.attr('value') !== undefined) {
var searchCriteria = searchCriteriaInput.val();
// Do stuff with searchCriteria, even if it is an empty string
}