ReferenceError: $showExpanded is not defined, but it cleary is
ReferenceError: $showExpanded is not defined, but it cleary is
大家好,我对 similar 问题做了一些研究,我尝试了给定的解决方案,但我仍然不明白为什么它不起作用。
每个人都说你必须使用 document ready
函数。
现在有些解决方案说我必须删除它?
我真的没有发现代码有问题。
有人可以向我清楚地解释为什么这不起作用吗?我很好奇。感谢您的努力。
代码如下:
$(document).ready(function(){
$('#expandSearch').css('display', 'none');
$('#easySearch').css('display', 'block');
function showExpanded(){
$('#expandSearch').css('display', 'block');
$('#easySearch').css('display', 'none');
}
function removeExpanded(){
$('#expandSearch').css('display', 'none');
$('#easySearch').css('display', 'block');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="easySearch">
easySearch
<p onclick="showExpanded">Show expanded</p>
</div>
<div id="expandSearch">
expandSearch
<p onclick="removeExpanded">Remove expanded</p>
</div>
您应该在 onclick
属性中使用 ()
:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="easySearch">
easySearch
<p onclick="showExpanded()">Show expanded</p>
</div>
<div id="expandSearch">
expandSearch
<p onclick="removeExpanded()">Remove expanded</p>
</div>
您应该在 document.ready
之外定义函数,并使用 ()
和 onclick
function showExpanded(){
$('#expandSearch').css('display', 'block');
$('#easySearch').css('display', 'none');
}
function removeExpanded(){
$('#expandSearch').css('display', 'none');
$('#easySearch').css('display', 'block');
}
$(document).ready(function(){
$('#expandSearch').css('display', 'none');
$('#easySearch').css('display', 'block');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="easySearch">
easySearch
<p onclick="showExpanded()">Show expanded</p>
</div>
<div id="expandSearch">
expandSearch
<p onclick="removeExpanded()">Remove expanded</p>
</div>
错误是由于您在 onclick
属性中的函数名称后缺少 ()
,例如:
<p onclick="removeExpanded()">Remove expanded</p>
这些函数也需要在 window
的范围内声明,因此您需要将它们移到 document.ready 事件处理程序之外。
但是,您根本不应该使用过时的 on*
事件属性。您应该改用不显眼的事件处理程序。由于您已经在使用 jQuery,您可以这样做:
$(document).ready(function(){
$('.show-expanded').click(function() {
$('#expandSearch').show()
$('#easySearch').hide();
});
$('.remove-expanded').click(function() {
$('#expandSearch').hide()
$('#easySearch').show();
});
});
#expandSearch { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="easySearch">
easySearch
<p class="show-expanded">Show expanded</p>
</div>
<div id="expandSearch">
expandSearch
<p class="remove-expanded">Remove expanded</p>
</div>
另请注意使用 CSS 在加载时隐藏 #expandSearch
元素。这是在 JS 运行之前执行的,因此它将避免任何 FOUC。
使用 jQuery,您可以将事件声明和事件处理程序以更简洁的方式移至 JavaScript 代码:
var $search = $('#easySearch, #expandSearch');
$search.find('p.expander').on('click', function () {
$search.toggle();
});
#expandSearch {display: none;}
p.expander {cursor: pointer;}
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="easySearch">
easySearch
<p class="expander">Show expanded</p>
</div>
<div id="expandSearch">
expandSearch
<p class="expander">Remove expanded</p>
</div>
大家好,我对 similar 问题做了一些研究,我尝试了给定的解决方案,但我仍然不明白为什么它不起作用。
每个人都说你必须使用 document ready
函数。
现在有些解决方案说我必须删除它?
我真的没有发现代码有问题。
有人可以向我清楚地解释为什么这不起作用吗?我很好奇。感谢您的努力。
代码如下:
$(document).ready(function(){
$('#expandSearch').css('display', 'none');
$('#easySearch').css('display', 'block');
function showExpanded(){
$('#expandSearch').css('display', 'block');
$('#easySearch').css('display', 'none');
}
function removeExpanded(){
$('#expandSearch').css('display', 'none');
$('#easySearch').css('display', 'block');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="easySearch">
easySearch
<p onclick="showExpanded">Show expanded</p>
</div>
<div id="expandSearch">
expandSearch
<p onclick="removeExpanded">Remove expanded</p>
</div>
您应该在 onclick
属性中使用 ()
:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="easySearch">
easySearch
<p onclick="showExpanded()">Show expanded</p>
</div>
<div id="expandSearch">
expandSearch
<p onclick="removeExpanded()">Remove expanded</p>
</div>
您应该在 document.ready
之外定义函数,并使用 ()
和 onclick
function showExpanded(){
$('#expandSearch').css('display', 'block');
$('#easySearch').css('display', 'none');
}
function removeExpanded(){
$('#expandSearch').css('display', 'none');
$('#easySearch').css('display', 'block');
}
$(document).ready(function(){
$('#expandSearch').css('display', 'none');
$('#easySearch').css('display', 'block');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="easySearch">
easySearch
<p onclick="showExpanded()">Show expanded</p>
</div>
<div id="expandSearch">
expandSearch
<p onclick="removeExpanded()">Remove expanded</p>
</div>
错误是由于您在 onclick
属性中的函数名称后缺少 ()
,例如:
<p onclick="removeExpanded()">Remove expanded</p>
这些函数也需要在 window
的范围内声明,因此您需要将它们移到 document.ready 事件处理程序之外。
但是,您根本不应该使用过时的 on*
事件属性。您应该改用不显眼的事件处理程序。由于您已经在使用 jQuery,您可以这样做:
$(document).ready(function(){
$('.show-expanded').click(function() {
$('#expandSearch').show()
$('#easySearch').hide();
});
$('.remove-expanded').click(function() {
$('#expandSearch').hide()
$('#easySearch').show();
});
});
#expandSearch { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="easySearch">
easySearch
<p class="show-expanded">Show expanded</p>
</div>
<div id="expandSearch">
expandSearch
<p class="remove-expanded">Remove expanded</p>
</div>
另请注意使用 CSS 在加载时隐藏 #expandSearch
元素。这是在 JS 运行之前执行的,因此它将避免任何 FOUC。
使用 jQuery,您可以将事件声明和事件处理程序以更简洁的方式移至 JavaScript 代码:
var $search = $('#easySearch, #expandSearch');
$search.find('p.expander').on('click', function () {
$search.toggle();
});
#expandSearch {display: none;}
p.expander {cursor: pointer;}
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="easySearch">
easySearch
<p class="expander">Show expanded</p>
</div>
<div id="expandSearch">
expandSearch
<p class="expander">Remove expanded</p>
</div>