2014-08-29 33 views
-1

我几乎是一个新手,当谈到Javascript时,请耐心等待。Javascript - 在双击后将文本更改回原来的页面

我有一个按钮,将打开一个div,然后显示城市列表,然后我实现了一个文本更改为“查看区域覆盖 - ”,这也正常工作。然而试图关闭div和文本返回到原来这是“涵盖景观区+”

这里的时候,我进入麻烦的是我的代码:

$(document).ready(
    function() { 
     $("#divArea").click(function(e) { 
      e.preventDefault(); 
      $("#areasCovered").fadeToggle(1000); 
      document.getElementById("h3Class").innerHTML = "View Areas Covered -"; 
     }); 
    }); 

    function() { 
     $("#divArea").click(function(e) { 
      e.preventDefault(); 
      $("#areasCovered").fadeToggle(1000); 

      if (document.getElementById("h3Class").value = "View Areas Covered -" == true) { 
       document.getElementById("h3Class").innerHTML = "View Areas Covered +"; 
      }; else { 

      } 
     }); 
    }); 

这里是HTML:

<div class="well well-sm">     
    <div id="divArea" class="img-responsive" > 
     <a href="#"><h3>View Areas Covered +</h3></a> 
     <div id ="areasCovered" class="img-responsive"> 
      <p class="paragraph1"> //list of cities </p> 
     </div> 
    </div> 
</div> 

任何帮助将是伟大的!

+0

这个lloks容易。但是我不明白你想要做什么。你能展示HTML并解释发生了什么,以及何时发生HTML? – JotaBe 2014-08-29 09:29:01

+0

@JotaBe更新^^ – Dog124 2014-08-29 09:30:43

+0

您的if子句看起来很难看,您不必检查== true,请尝试document.getElementById(“h3Class”)。value ==“查看区域覆盖 - ” – 2014-08-29 09:32:32

回答

0

你需要改变你的逻辑了一下,没必要两个点击处理程序。在这里我添加一个简单的css-class来判断区域是否被切换。此外,如果你使用jQuery,没有必要使用的getElementById

$(function() { 
    $("#divArea").click(function (e) { 
     e.preventDefault(); 
     $(this).find("h3").text($(this).is(".js-clicked") ? "View Areas Covered +" : "View Areas Covered -"); 
     $(this).toggleClass("js-clicked"); 
     $(this).find("#areasCovered").fadeToggle(1000); 
    }); 
}); 

Fiddle

+0

谢谢,这工作 - 但是,当我点击它,页面移动到顶端,它没有做过,我试图避免提高用户体验。有没有解决这个问题? – Dog124 2014-08-29 09:39:03

+0

(该操作位于页面底部) – Dog124 2014-08-29 09:39:41

+0

我删除了preventDefault,因为在看到html之前我不知道你有一个链接,添加它并且它可以工作。 – Esko 2014-08-29 09:54:26

0

您的文档准备是错误的,使用此语法:

$(document).ready(function() { 
     $("#divArea").click(function(e) { 
     e.preventDefault(); 
     $("#areasCovered").fadeToggle(1000); 

     if (document.getElementById("h3Class").value = "View Areas Covered -" == true) { 
      document.getElementById("h3Class").innerHTML = "View Areas Covered +"; 
     } else { 
      document.getElementById("h3Class").innerHTML = "View Areas Covered -"; 
     } 
    });  
}); 

这应该工作。

Editted: 加else语句

Editted 2: 清理代码有点

+0

感谢您的输入 - 但是,当我尝试这个淡入淡出开关拒绝工作 – Dog124 2014-08-29 09:35:20

+0

我建议你应该让你的JS验证。我看到一些失落的“;”这里和那里。除此之外,我还没有真正触及你的fadeToggle()。如果它不起作用,请尝试使用fadeIn()和fadeOut()?我需要更多关于你衰落的信息来了解它的功能。 – 2014-08-29 09:39:28

0

你的if语句似乎有点混乱。尝试直接比较值而不是检查“true”:

if (document.getElementById("h3Class").value == "View Areas Covered -") { 
    // do something 
} 

您也不需要两个不同的点击处理程序。

0

看看你的if条件,你不必检查== true,而且你必须将字符串与“==”而不是“=”进行比较。

if (document.getElementById("h3Class").value = "View Areas Covered -" == true) { 
    document.getElementById("h3Class").innerHTML = "View Areas Covered +"; 
}; 

试试这个:

if (document.getElementById("h3Class").value == "View Areas Covered -") { 
    document.getElementById("h3Class").innerHTML = "View Areas Covered +"; 
}; 

OR

if (document.getElementById("h3Class").innerHTML == "View Areas Covered -") { 
    document.getElementById("h3Class").innerHTML = "View Areas Covered +"; 
}; 

希望这有助于

0

你的JavaScript代码是错误的在多个方面:

  • 首先,当我执行它,我得到“功能语句需要一个名称”(等待什么?!)
  • 有你if声明的末尾;,让您的else声明完全无用
  • 你为什么要用几乎完全相同的内容来声明两个函数?
  • 你声明一个函数没有名字,但你永远不使用它
  • 你的if语句是不正确,您同时拥有一个===迹象吧:你要测试的真正考验是什么?

我将展示如何从你的代码,我尝试修复后的问题一一其他:

这是你的初始代码:

$(document).ready(
    function() { 
     $("#divArea").click(function(e) { 
      e.preventDefault(); 
      $("#areasCovered").fadeToggle(1000); 
      document.getElementById("h3Class").innerHTML = "View Areas Covered -"; 
     }); 
    }); 

    function() { 
     $("#divArea").click(function(e) { 
      e.preventDefault(); 
      $("#areasCovered").fadeToggle(1000); 

      if (document.getElementById("h3Class").value = "View Areas Covered -" == true) { 
       document.getElementById("h3Class").innerHTML = "View Areas Covered +"; 
      }; else { 

      } 
     }); 
    }); 

首先,在怀疑与时你的代码,这是一个好一点的同名函数,你的外部化“的document.ready”代码:

// I've just taken the function in the $(document).ready call 
// and externalize it with a name 
function onReady() { 
    $("#divArea").click(function(e) { 
     e.preventDefault(); 
     $("#areasCovered").fadeToggle(1000); 
     document.getElementById("h3Class").innerHTML = "View Areas Covered -"; 
    }); 
} 

$(document).ready(onReady); 

    // here you can see there is still a function with no name 
    // why is that happening ? that's not correct 
    function() { 
     $("#divArea").click(function(e) { 
      e.preventDefault(); 
      $("#areasCovered").fadeToggle(1000); 

      if (document.getElementById("h3Class").value = "View Areas Covered -" == true) { 
       document.getElementById("h3Class").innerHTML = "View Areas Covered +"; 
      }; else { 

      } 
     }); 
    }); 

现在,你可以看到显示此unammed未使用的功能清晰。如果是未使用的,还有其他地方的一个问题:它的逻辑应该在onReady方法:

function onReady() { 
    $("#divArea").click(function(e) { 
     e.preventDefault(); 
     $("#areasCovered").fadeToggle(1000); 

     if (document.getElementById("h3Class").value = "View Areas Covered -" == true) { 
      document.getElementById("h3Class").innerHTML = "View Areas Covered +"; 
     }; else { 

     } 
    }); 
} 

$(document).ready(onReady); 

接下来,我们尽量简化你的代码位:

function onReady() { 
    $("#divArea").click(function(e) { 
     e.preventDefault(); 
     $("#areasCovered").fadeToggle(1000); 

     // use local variable when you can 
     var elementToReplace = document.getElementById("h3Class"); 

     // look closely at this if statement, 
     // you should see 2 incorrect things 
     if (elementToReplace.value = "View Areas Covered -" == true) { 
      elementToReplace.innerHTML = "View Areas Covered +"; 
     }; else { 

     } 
    }); 
} 

$(document).ready(onReady); 

if具有如下形式: if (a.b = "c" == true)。这是一个有效的JavaScript语句,但绝对不是你想要做的。我想你想要的是:if (a.b === "c")。 因此,让我们改写这个if声明,并把大括号在新行:

if (elementToReplace.value === "View Areas Covered -") 
{ 
    elementToReplace.innerHTML = "View Areas Covered +"; 
}; 
else 
{ 
} 

你看到if}后挂起;?这是不正确的。

最后,这里是你可以做什么:

// when in doubt with your code, it's a bit better to 
// externalize your "document.ready" code in a named function 
function onReady() { 
    $("#divArea").click(function(e) { 
     e.preventDefault(); 
     $("#areasCovered").fadeToggle(1000); 

     // use local variable when you can 
     var element = document.getElementById("h3Class"); 

     if (element.value === "View Areas Covered -") 
     { 
      element.innerHTML = "View Areas Covered +"; 
     } 
     else 
     { 
      element.innerHTML = "something else"; 
     } 
    }); 
} 

$(document).ready(onReady); 
+0

使用你的代码,在第二次点击时,文本不会返回到+ – Dog124 2014-08-29 09:53:14

+0

这是正常的......当值是'xxx -'时,你设置为'xxx +',但是当它不是你设置为'别的东西(好吧,我把它设置在我的代码**示例**中)。你至少读过我的代码了吗?! – pomeh 2014-08-29 09:56:56

0

如果我理解正确的,你需要的是显示/隐藏的区域列表,并更改标题根据地区名单的知名度,即如果区域隐藏显示+,并且如果它是viisble,则显示减号。

你可以用这个小的代码做到这一点:

<div class="well well-sm">     
    <div id="divArea" class="img-responsive" > 
     <a href="#" id="toggle"><h3>View Areas Covered -</h3></a> 
     <div id ="areasCovered" class="img-responsive"> 
      <p class="paragraph1"> //list of cities </p> 
     </div> 
    </div> 
</div> 

而且此javascript:

$('#toggle').click(function() { 
    $('#areasCovered').stop(true,true); 
    var visible = $('#areasCovered').is(':visible') 
    $('#areasCovered').fadeToggle(1000); 
    var $title= $('#divArea').find('h3'); 
    $title.text(visible 
       ? 'View Areas Covered +' 
       : 'View Areas Covered -'); 
}); 

Look the JSFiddle here

+0

但JSFiddle中的文本没有回到+,这正是我需要的 – Dog124 2014-08-29 09:50:01

+0

它现在正在工作。我最初用'toggle'命中它,它工作正常,但后来我将它改成了fadeToggle''并将它播放。它现在正在工作。 – JotaBe 2014-08-29 09:56:12

+0

我进一步更新了代码:现在+和减去appaear时,他们必须,并且,如果您在切换完成之前单击链接,它工作正常。顺便说一句,我会做一个更快的'fadeToggle',1秒太慢了。这是否能解决您的问题? – JotaBe 2014-08-29 10:05:43

0
$(document).ready(function(){ 
     $("#divArea").click(function(e){ 
      e.preventDefault(); 
      $("#areasCovered").fadeToggle(1000); 
      var button = $("#h3Class"); 
      if(button.html() == "View Areas Covered +") 
       button.html("View Areas Covered -"); 
      else 
       button.html("View Areas Covered +"); 
     }); 
    }); 

所以我做了一些修复和优化。

  • DOM请求是昂贵的,并不是很大,但它的良好实践,以保持他们的最低限度。所以我将元素存储为变量,因此我们有1个请求不是2.
  • 将DOM请求交换为jQuery,因为您已经在使用它。
  • 现在只需将一个监听器注册到该按钮,并带有切换if语句。
相关问题