2012-02-29 39 views
0

我有一個大的有序列表和正在使用jquery一個onclick處理程序添加到每一行。這在第一次點擊之後很好地工作,但是在頁面加載之後的第一次點擊時,根本沒有任何反應。頁面上沒有javascript錯誤。有什麼建議嗎?jQuery的不叫了第一次點擊onclick處理程序,然後工作

<ol> 
<li>Line 1</li> 
<li>Line 2</li> 
<li>Line 3</li> 
</ol> 
<script> 
    $(document.body).click(function() { 
     $("li").each(function (i) { 
     this.onclick = function() { alert(i+1); } 
     }); 
    }); 
</script> 
+0

你到底在做什麼?使用。對(「點擊」),這適用於其中添加元素後的DOM已經完全加載 – 2012-02-29 14:28:59

回答

2

的問題是,你在$(document.body).click所以內部代碼不會被執行包裹它,除非你頁面點擊第一個地方。

嘗試沒有$(document.body).click,應該工作正常。

+0

完美 - 謝謝。 – cdmh 2012-02-29 15:02:55

0

這是因爲當第一次點擊DOM時列表項上的click事件被綁定。我認爲你的意思做的,是將click事件綁定在DOM準備就緒:

$(document).ready(function() { 
    $("li").each(function (i) { 
     this.onclick = function() { alert(i+1); } 
    }); 
}); 
0

的情況下就綁定在DOM準備就緒,而不是之後點擊body

$(function(){ 
     $("li").each(function (i) { 
      this.onclick = function() { alert(i+1); } 
     }); 
}); 
+0

您在這裏複製的代碼仍然需要在身體上點擊它加載了li元素的onclick事件之前。 – 2012-02-29 14:30:46

+0

對,修正了這個問題。 – gdoron 2012-02-29 14:32:19

0

看來你問的身體裏的得到的單擊事件綁定之前:在行動

$(document.body).on('click','li',function() { 
    var i = $('li').index(this); 
    alert(i+1); 
}); 

例。此外,有jQuery和標準JavaScript的組合,但是我沒有解決,在這裏 - 只要得到它在這裏工作:

<script> 
    $(function() { 
     $("li").each(function (i) { 
     this.onclick = function() { alert(i+1); } 
     }); 
    }); 
</script> 

注意,這會等到身體負荷運行前,確保每個華里顯示並獲取事件綁定。

0

那麼你要添加一個點擊的文檔,單擊該文檔時,增加了點擊事件列表中的元素。你需要擺脫第一次點擊和轉換功能,以準備一個文件:

$(document).ready(function() { 
    $("li").click(function() { 
    // do something 
    }); 
}); 

也沒有必要對每一個循環,你可以直接綁定到li元素。

0

要綁定2個點擊事件,第一:

$(document.body).click(function() { 

...點擊,並通過新的點擊事件綁定到列表中的項目,因此第2點擊響應響應身體的時候觸發。

目前尚不清楚你想要做什麼,但該代碼幾乎可以肯定是不是。 :)

相關問題