我的愿望输出是当用户点击按钮时隐藏段落,同样的按钮将用于隐藏段落并更改按钮的名称。
正如您在片段中看到的输出一样,当我单击按钮时,按钮的文本不会更改,并且段落也不会显示。
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$("p").hide("slow", function(){
if($("#myShowHidebtn").prop('value', 'Show'))
$('#myShowHidebtn').html('Hide');
alert("The paragraph is now hidden");
});
$("#myShowHidebtn").on("click", function(){
if($("#myShowHidebtn").prop('value', 'Hide'))
$('#myShowHidebtn').html('Show');
alert("The paragraph is now hidden");
});
});
});
</script>
</head>
<body>
<button id="myShowHidebtn">Hide</button>
<p>Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..</p>
</body>
</html>
答案 0 :(得分:4)
首先Html()
不正确。方法名称为html()
。
您的逻辑问题是,每次点击时,您都会向click
元素添加新的button
处理程序。要修复逻辑,只需在toggle('slow')
上调用p
,然后直接在点击处理程序中根据其当前设置更新text()
button
。您还可以使用stop()
来阻止快速连续点击填充动画队列。试试这个:
$(document).ready(function() {
$("button").click(function() {
$("p").stop(true).toggle("slow");
$("#myShowHidebtn").text(function(i, t) {
return t == 'Hide' ? 'Show' : 'Hide';
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<button id="myShowHidebtn">Hide</button>
<p>Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..</p>
答案 1 :(得分:2)
$("#myShowHidebtn").on("click", function() {
console.log($(this).text() == 'Hide')
if ($(this).text() == 'Hide') {
$('#myShowHidebtn').text('Show');
$("p").hide("slow");
} else if ($(this).text() == 'Show') {
$('#myShowHidebtn').text('Hide');
$("p").show("slow");
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="myShowHidebtn">Hide</button>
<p>Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..</p>
ID
答案 2 :(得分:2)
您的代码有点复杂,逻辑上也不正确。
html()
而不是Html()
这应该很有效:
$("button").click(function(){
$("p").toggle("slow", function(){
if ($("p").is(':visible')) {
$('#myShowHidebtn').html('Hide');
} else {
$('#myShowHidebtn').html('Show');
}
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<button id="myShowHidebtn">Hide</button>
<p>Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..</p>
&#13;
答案 3 :(得分:2)
您的代码中应该纠正几个问题:
click
事件处理程序两次,会导致无限
循环,因为您正在重新附加按钮中的click
处理程序
click
本身。您value
错误地使用了按钮的if
条件,以下$("#myShowHidebtn").prop('value', 'Show')
不正确,应为$("#myShowHidebtn").prop('value') === 'Show'
。
另一个问题是,您没有更改按钮value
可以测试它,你正在改变button
html,所以你只需要
测试.html()
。
<强>解决方案:强>
我尝试重构你的代码并纠正所有错误,这就是你需要的:
$("#myShowHidebtn").on("click", function() {
if ($("#myShowHidebtn").html() === 'Hide') {
$('#myShowHidebtn').html('Show');
$("p").hide("slow");
} else {
$('#myShowHidebtn').html('Hide');
$("p").show("slow");
}
});
<强>演示:强>
$("#myShowHidebtn").on("click", function() {
if ($("#myShowHidebtn").html() === 'Hide') {
$('#myShowHidebtn').html('Show');
$("p").hide("slow");
} else {
$('#myShowHidebtn').html('Hide');
$("p").show("slow");
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="myShowHidebtn">Hide</button>
<p>Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..</p>
&#13;
答案 4 :(得分:2)
您正在设置属性值而不执行if,并且您还在每次单击时绑定额外的单击事件。尝试以下(jQuery中的注释)
$("#myShowHidebtn").click(function() { // bind the click to the button
var button = $(this);
if (button.html() == 'Hide') { // check the html (the button has no value and prop('','') is a setter not a getter
$("p").hide("slow", function() { // do your hide
button.html('Show');
});
} else {
$("p").show("slow", function() { // do your show
button.html('Hide');
});
}
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="myShowHidebtn">Hide</button>
<p>Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..</p>
&#13;
答案 5 :(得分:1)
您应该使用$('#myShowHidebtn').html('Show'); $('#myShowHidebtn').html('Hide');
而不是.Html
- JavaScript函数名称区分大小写。
答案 6 :(得分:1)
$(document).ready(function(){
$("#myShowHidebtn").click(function(){
$("p").toggle(function(){
if($("#myShowHidebtn").text() == "Hide"){
$("#myShowHidebtn").text("Show"); }
else{ $("#myShowHidebtn").text("Hide"); }
});
});
});
答案 7 :(得分:1)
在这个小代码片段中,我定义了按钮的默认行为 - hide
。然后,我们对p
标记进行简单检查 - 是否隐藏?如果是,请将功能更改为show
。然后,我们在p
标签上执行该功能,并根据功能名称在按钮中显示相应的值。
$(document).ready(function() {
$("button").click(function() {
var func = 'hide',
$this = $(this),
$p = $this.next();
if ($p.is(':hidden')) {
func = 'show';
}
$p[func]('slow', function() {
$this.html(func == 'hide'?'Show':'Hide');
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<button id="myShowHidebtn">Hide</button>
<p>Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..Paragraph Containt..</p>
答案 8 :(得分:1)
Rory对,&#34; Html&#34;标签是问题的根源,因为JS区分大小写
我已经改变了一点代码,看起来更聪明。
var hidden = false;
$("#myShowHidebtn").click(function() {
if (hidden == false)
{
$("p").hide("slow", function() {
$("#myShowHidebtn").html("Show");
alert("The paragraph is now hidden");
hidden = true;
});
}
else
{
$("p").show("slow", function() {
$("#myShowHidebtn").html("Hide");
alert("The paragraph is now shown");
hidden = false;});
}
});
工作正常,请检查here
此致