在jquery中切换链接

时间:2009-08-03 17:26:24

标签: jquery

我正在尝试切换具有id showmember的链接。

我做了以下

$("#table2").hide(); //this is for hiding table when page loads first time
$("#showmember").toggle(function(){
       $("#table2").show(); 
       $("#showmember").html("Hide Member Details");      
       event.preventDefault();
       }, 
       function () {
       $("#table2").hide(); 
       $("#showmember").html("Show Member Details");      
       event.preventDefault();
});
<a id="showmember" href="" >Show Member</a>

然而,它有时会起作用,有时却不起作用。实际上,当我点击它带我到另一个页面的链接时,它在第一页加载时给出了JS错误,说'对象预期'。当我点击浏览器后退按钮并返回原始页面时,一切都按预期工作。我正在使用ie6

4 个答案:

答案 0 :(得分:2)

您没有将事件对象传递给函数。

$("#table2").hide(); //this is for hiding table when page loads first time
$("#showmember").toggle( function(event){
          $("#table2").show(); 
          $("#showmember").html("Hide Member Details");      
          event.preventDefault();
       }, 
       function (event) {
          $("#table2").hide(); 
          $("#showmember").html("Show Member Details");      
          event.preventDefault();
});
<a id="showmember" href="" >Show Member</a>

答案 1 :(得分:0)

您在处理程序函数中缺少对参数事件的引用,不确定是否是您的问题的原因,但可能有助于在执行时不抛出异常

$("#showmember").toggle(function(event){
       $("#table2").show(); 
       $("#showmember").html("Hide Member Details");      
       event.preventDefault();
       }, 
       function (event) {
       $("#table2").hide(); 
       $("#showmember").html("Show Member Details");      
       event.preventDefault();
});

答案 2 :(得分:0)

你需要将事件作为参数传递,正如其他人所说的那样,但我想也许它与链接实际加载之前执行的代码有关?尝试将代码移动到$(document).ready()块:



$(document).ready(function(){
  //Your code:
  $("#table2").hide(); //this is for hiding table when page loads first time
  $("#showmember").toggle( function(event){
          $("#table2").show(); 
          $("#showmember").html("Hide Member Details");      
          event.preventDefault();
       }, 
       function (event) {
          $("#table2").hide(); 
          $("#showmember").html("Show Member Details");      
          event.preventDefault();
  });
});

您应该在此函数中放置与页面上的元素交互的代码(在页面加载时)。

对不起,如果你这样做,只是省略了这个细节:)

(另外,如果你没有尝试在页面加载时这样做,我只是再次阅读这个问题,现在我不太确定......)

答案 3 :(得分:0)

如果从切换处理程序中删除event.preventDefault()行,它应该可以正常工作。我在IE6中测试了以下代码。

$(function() {
    $("#table2").hide(); //this is for hiding table when page loads first time
    $("#showmember").toggle(
        function() {
            $("#table2").show();
            $("#showmember").html("Hide Member Details");
        },
        function() {
            $("#table2").hide();
            $("#showmember").html("Show Member Details");
        }
    );
});

我不认为您需要阻止在您的情况下发生默认操作,因为您没有给锚的href属性赋值。如果您决定阻止默认操作,则需要在其他人提到的切换处理程序中定义事件参数。

$(function() {
    $("#table2").hide(); //this is for hiding table when page loads first time
    $("#showmember").toggle(
        function(e) {
            $("#table2").show();
            $("#showmember").html("Hide Member Details");
            e.preventDefault();
        },
        function(e) {
            $("#table2").hide();
            $("#showmember").html("Show Member Details");
            e.preventDefault();
        }
    );
});