11

このコードから関数を呼び出します:

    <div id="header-button-news" class="header-button-info">
        <a href="javascript:;" title="Новости" onclick="showNews()"></a>
        <div class="new">2</div>
    </div>

私の機能は

function showNews()
{          
        //other js which show block 

        jQuery("#loader").show();


        //ajax which load content to block
        jQuery.ajax({
            type: "GET",
            url: link,
            dataType: "html",
            success: function(data) {
                jQuery('#top-info-news').html(data);   
            },
            complete: function(){
                jQuery('#loader').hide();
            },
        });
}

ajax呼び出しを1回だけ行うにはどうすればよいですか? コンテンツがロードされ、ページがrefresedされていない場合、ajaxをロードしないのですか? ブール変数を実行しようとしましたが、何もしませんでした。毎回関数を呼び出すためだと思います。やり方を教えてください。

ありがとうございました

4

3 に答える 3

28

そのイベントで何かをしたいとき。

データをいつロードしたかを特定します。

var loaded = false;

function showNews() {
    //other js which show block 

    jQuery("#loader").show();


    if(loaded) return;

    //ajax which load content to block
    jQuery.ajax({
        type: "GET",
        url: link,
        dataType: "html",
        success: function(data) {
            jQuery('#top-info-news').html(data);   
        },
        complete: function(){
            jQuery('#loader').hide();
        },
    });

    loaded = true;
}

またはone.、一度呼び出したいときに使用します。

<a href="javascript:;" title="Новости" onclick="showNews()" class="showNews"></a>

jQuery('.showNews').one('click', function() {
    // your code
});

"Attach a handler to an event for the elements. The handler is executed at most once per element."

参照

于 2012-07-31T11:21:27.250 に答える
11

関数を使用し.one()ます:

要素のイベントにハンドラーをアタッチします。ハンドラは要素ごとに最大 1 回実行されます。

<a href="#" title="Новости" id="shownews"></a>

簡単にバインドできるようにアンカーに属性を追加しましたidが、使用できます$("#header-button-news a").one

$(document).ready(function () {
  $('#shownews').one('click', function (evt) {

    evt.preventDefault(); // prevent default click action

    jQuery("#loader").show();
    //ajax which load content to block
    jQuery.ajax({
      type: "GET",
      url: link,
      dataType: "html",
      success: function (data) {
        jQuery('#top-info-news').html(data);
      },
      complete: function () {
        jQuery('#loader').hide();
      },
    });
  });
});

event.preventDefault()アンカーのデフォルト アクションが実行されないようにするためにも使用されます。

于 2012-07-31T11:21:33.843 に答える
1
<div id="header-button-news" class="header-button-info">
    <a id="a_news" title="Новости"></a>
    <div class="new">2</div>
</div>

JS で:

$(function(){
    $('a#a_news').one('click',showNews);
})
于 2012-07-31T11:21:42.000 に答える