javascript
  • jquery
  • dom
  • 2013-01-18 96 views 0 likes 
    0

    我正在使用砌體類型代碼在我的頁面上顯示Div,並使用API​​獲取數據,因此所有內容都通過html+=加載到DOM中。在DOM中看不到腳本,它會觸發兩次?

    例如每個div都被加載這樣

    html += '<li><div class="classname>content'; 
    html += '<div id="like'+image.article_id+'">'; 
    html += '<a href="#" class="like" id="'+image.article_id+'">'; 
    html += '<div class="bLike" title="Like this article"></div></a></div>'; 
    html += '<div id="unlike'+image.article_id+'" style="display:none;">'; 
    html += '<a href="#" class="unlike" id="'+image.article_id+'">'; 
    html += '<div class="bUnlike" title="Unlike this article"></div></a></div>'; 
    html += '</div></li>'; 
    

    現在,我使用所示的結果中的類似按鈕,使用AJAX來更新我的數據庫,讓用戶看到他們所希望的。簡單。

    因此,要獲得Ajax代碼發揮我必須把它加載到我下面做的DOM,我上面顯示的div例子後加載此:

    html += '<script type="text/javascript">'; 
        html += '$(function()'; 
        html += '{'; 
        html += '$(".like").click(function(){'; 
        html += 'var element = $(this);'; 
        html += 'var I = element.attr("id");'; 
        html += 'var info = \'wish_id=\' + I;'; 
        html += '$(\'#like\'+I).hide();'; 
        html += '$(\'#unlike\'+I).show();'; 
        html += '$.ajax({'; 
        html += 'type: "POST",'; 
        html += 'url: "/pages/includes/ajax/like.php",'; 
        html += 'data: info,'; 
        html += 'success: function(){'; 
        html += '}'; 
        html += '});'; 
        html += 'return false;'; 
        html += '});'; 
        html += '});'; 
    html += '</script>'; 
    html += '<script type="text/javascript" >'; 
        html += '$(function()'; 
        html += '{'; 
        html += '$(".unlike").click(function(){'; 
        html += 'var element = $(this);'; 
        html += 'var I = element.attr("id");'; 
        html += 'var info = \'wish_id=\' + I;'; 
        html += '$(\'#unlike\'+I).hide();'; 
        html += '$(\'#like\'+I).show();'; 
        html += '$.ajax({'; 
        html += 'type: "POST",'; 
        html += 'url: "/pages/includes/ajax/unlike.php",'; 
        html += 'data: info,'; 
        html += 'success: function(){'; 
        html += '}'; 
        html += '});'; 
        html += 'return false;'; 
        html += '});'; 
        html += '});'; 
    html += '</script>'; 
    

    現在,當用戶點擊像或不像,它會發射兩次,因此擊中數據庫兩次,基本上加倍了整個工作量,這從來都不是很好。

    所以,我想可能上面顯示的腳本已經加載到DOM兩次。所以我去firefox的螢火蟲,看看加載到DOM的代碼。所有的div都在那裏,我使用相同的html+=加載,但不是上面的腳本。我知道它在那裏,因爲它工作正常。

    那麼,爲什麼我不能看到它,爲什麼它會發射兩次呢?

    有沒有更好的方式來做到這一點?

    編輯:

    這是加載頁面的API:

    function loadData() { 
        isLoading = true; 
        $('#loaderCircle').show(); 
    
        $.ajax({ 
        url: apiURL, // fetches from MySQL 
        dataType: 'json', // data type 
        data: {page: page}, // page number so each request brings in next records 
        success: onLoadData // loads the data which is looped and html+= as at top of post 
        }); 
    }; 
    
    +0

    如果我們不知道API是如何工作的,我不知道我們是否可以提供很多幫助。 quickfix可以使用[命名空間事件](http://docs.jquery.com/Namespaced_Events)並解開任何已有的命令:'$('。like')。off('click.yourNS')。on(' click.yourNS',func ....);'。但是找出實際問題並修復它當然好得多。 –

    +0

    @FelixKling添加API詳細信息,感謝您的任何幫助。 –

    +1

    我很驚訝這個代碼甚至可以工作。首先,你不應該附加'