2010-11-12 33 views
5

Tôi có một liên kết có một href là "/news#1930". Khi tôi nhấp vào liên kết này khi trên trang /news, nó không làm mới trang (nó chỉ thêm # 1930 vào cuối URL). Tôi muốn nó làm mới trang mặc dù (Tôi đang sử dụng thông tin sau thẻ # với một số jquery để tải bài viết cụ thể đó trong iframe tương ứng và khi nó không làm mới nó sẽ không tải bài viết mới). Bất kỳ ý tưởng về làm thế nào để buộc làm mới?Cách tạo trang bằng thẻ băm Href Refresh

Mã Tôi hiện đang có là:

$(document).ready(function() { 
    var $news_story  = $(window.location.hash.substring(1)), 
     $news_number  = $news_story.selector, 
     $news_url   = 'http://www.synergy-pr.com/news/mediacenter/index.html?view=article&CustomerID=41b1if9-a17d4va5sf7of15e3kb0pa3kd2y-99d03n8sq4ad2xk8h47j00r98el5pf&ClientArticleID=' + $news_number, //url of specific article 
     $news_url_default = 'http://www.synergy-pr.com/news/mediacenter/index.html?CustomerID=41b1if9-a1hd4xa52f78f1ke3bb0oa3ld2k-90208c8g64x02nh8wf7ad0m181p5su'; //url of general news page 

     if ($news_number.length>0) { //if their is a # with a number, this means it is a sidebar link and should load that specific article 
      $('#news-feed').attr('src', $news_url); 
     } else { //if not, load the main news page 
      $('#news-feed').attr('src', $news_url_default); 
     } 
}); 

Trả lời

-5

Hãy thử một không gian trước băm:

"/news #1930" 
+0

Được rồi, gọi tốt. Điều đó làm việc cho một liên kết, nhưng tôi thực sự có ba trong số các liên kết này. Khi tất cả chúng đều có không gian, cùng một vấn đề không làm mới xảy ra. Tôi đã tấn công xung quanh điều này bằng cách đặt một khoảng trống giữa cái đầu tiên, hai giữa cái thứ hai và ba giữa cái thứ ba. Điều này làm việc, nhưng không thể là cách tốt nhất để làm điều đó. Bất kỳ suy nghĩ về làm thế nào để làm cho điều này tốt hơn? – Andrew

+0

Không có nhiều URL băm. Tôi không nghĩ có một con đường khác. Có lẽ mã hóa giá trị băm sẽ là một thay thế tốt cho việc sử dụng nhiều giá trị băm. –

6

Hashes có nghĩa là để không gây ra một tải lại trang. Nếu bạn đang sử dụng jQuery để tải bài viết đó, bạn có thể muốn thực hiện một history.go (0) hoặc window.location.reload, sau đó sử dụng jQuery để tìm thẻ băm và quy trình (trên sự kiện tải của trang được làm mới).

$(document).ready(function(){ 
    loadArticle = function(articleId){ 
    // code to query/load the article 
    }; 
    if (window.location.hash) 
    articleLoad(window.location.hash); 

    $('.articleLink').click(function(){ 
    window.location.hash = $(this).attr('rel'); 
    window.location.reload(); 
    }); 
}); 

EDIT tôi giả sử bạn đang đi con đường băm cho các trang web lý do tương tự như facebook làm cũng - cho khả năng cuốn sách đánh dấu và lập chỉ mục cho dù bạn đang sử dụng ajax cho sự tích hợp liền mạch.

EDIT 2 Đây là những gì tôi đã đưa ra để hiển thị những gì tôi đang đề cập đến. Điều này sẽ tải lên một băm được truyền qua URL và xử lý bất kỳ nhấp chuột mới nào cho các bài viết mới trong trang.

<html> 
    <head> 
    <title>Article Viewer</title> 

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js"></script> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 

     // loader function to serve up the correct article (pushes the article number to an iFrame 
     // so it can remotely load the article within the page 
     loadArticle = function(articleId){ 
      // set the hash (incase it's called from a link instead of a page load) 
      window.location.hash = articleId; 
      // change the iFrame src to the actual path fo the article page (customize this to fit your needs) 
      $('#article-frame').attr('src','view_article.php?article='+articleId); 
     }; 

     // check for a hash (#????) tag in the URL and load it (to allow for bookmarking) 
     if (window.location.hash) 
      loadArticle(window.location.hash.substring(1)); 

     // attack a click event to all the links that are related to loading an article 
     $('.article-link').click(function(){ 
      // grab raw article id from rel tag 
      var articleId = $(this).attr('rel'); 

      // shove loading it off to the "loader" 
      loadArticle(articleId); 

      // cancel the navigation of the link 
      return false; 
     }); 
     }); 
    </script> 
    </head> 

    <body> 
    <ul> 
     <?php for ($a = 1; $a < 10; $a++) echo "<li><a href=\"view_article.php?article={$a}\" rel=\"{$a}\" class=\"article-link\">View Article {$a}</a></li>\r\n  "; ?> 
    </ul> 
    <iframe id="article-frame" src="view_article.php?article=0" width="640" height="480"> 
     This page uses frames, unfortunately your browser does not support them. 
    </iframe> 
    </body> 
</html> 
+0

Bài viết nằm trong iframe, điều thực sự gây ra tất cả những vấn đề này. Trên tất cả các trang trên trang web có các liên kết thanh bên cho các bài viết trong khung nội tuyến. Tôi cần một cách để cả hai liên kết đến trang tin tức và sau đó mở ra bài viết chính xác. Cách tôi tìm thấy để làm điều này là thêm một thẻ băm vào các liên kết thanh bên, sau đó chuyển đổi nó thành một số có bốn chữ số tương ứng với ID bài viết và thêm nó vào cuối URL iframe. Nó hoạt động trên tất cả các trang ngoại trừ vấn đề ở trên. Nếu bạn có một cách tiếp cận tốt hơn cho toàn bộ vấn đề, tôi chắc chắn sẽ cởi mở với nó. – Andrew

+0

Trong hàm loadArticle() ở trên, bạn có thể thông báo cho iFrame để chuyển đổi vị trí (cái gì đó có hiệu lực là $ ('#iframe') .attr ('src', 'http: //mysite.com/article'+articleId+' Trừ khi tôi không hoàn toàn hiểu được tình hình, những gì bạn đang cố gắng hoàn thành sẽ khá đơn giản –

+0

Tôi chắc rằng điều này sẽ khá dễ dàng, nhưng tôi đang gặp một số vấn đề trong việc tìm ra nó. Điều này (với số lượng không gian khác nhau giữa mỗi thẻ liên kết #) hoạt động tốt, tôi chỉ biết đây không phải là cách tốt nhất để làm điều đó và muốn làm điều đó một cách chính xác Bất kỳ trợ giúp nào cũng sẽ tuyệt vời. – Andrew

-1

Hãy thử điều này:

$("a").click(function(){ 
    $("a").click(function(e){ 

    var location = $(window).attr('location').pathname.substring(1); 
    var goingToPage = $(this).attr('href'); 

    // if goingToPage is same page as current page, then assign new url and reload 
    // this is required to reload the page on a hash tag 
    if(goingToPage.indexOf(location) != -1){ 
     $(window).attr('location').assign(goingToPage); 
     $(window).attr("location").reload(); 
    } 
}); 
}); 
0

$("a").click(function() { 
 
     var hash = this.hash; 
 
     if (hash != "" || hash!= null) 
 
      window.location.reload(); 
 
    });

Mã này sẽ tải lại tất cả các liên kết trang phù thủy có băm

Các vấn đề liên quan