2010-09-12 55 views
2

我的代碼,我的問題是:jquery.Event動態元素

<script type="text/javascript"> 
$(document).ready(function() { 
    // this variable is used to set the dynamic elements 
    tagFlag = ''; 

    $("#a1").click(function(event) { 
     event.preventDefault(); 
     tagFlag = 'me'; // setting the element which I want to trigger later 
    }); 

    $('#'+tagFlag).click(function(e) { 
     // do sthing here 
    }); 
}); 

</script> 
</head> 

<body> 
<a href="">make the element</a> 
<p id="me">some words here</p> 
</body> 
</html> 

but.when我設置tagFlag,並點擊「P」沒有什麼是happen.BTW.there是錯誤時tagFlag已經什麼都沒有設置。那麼我怎樣才能得到我想要的?

非常感謝!

回答

0

也許你應該看看jQuery live()方法,它將事件分配給所有現有和將來的元素。

http://api.jquery.com/live/

+0

這沒有幫助。 – SLaks 2010-09-12 15:19:45

+0

我試過了.Live()方法沒有改變....如果我設置tagFlag ='';我得到了這個錯誤:未捕獲的異常:語法錯誤,無法識別的表達式:# – qinHaiXiang 2010-09-12 15:26:43

0

沒有元素機智的ID 「A1」。如果你想第一錨元素使用

$.("a:eq(0)") 

代替。

如果不是這樣,請回報。

0

使用jQuery對象和被點擊的元素添加到它:

$(document).ready(function() { 
    $tagFlag = $(""); 

    $("#a1").click(function(event) { 
    event.preventDefault(); 
    $tagFlag.add($(this)); 
    }); 

    $tagFlag.click(function(e) { 
    // do sthing here 
    }); 

}); 
+0

這將不起作用,'click'事件將被綁定到沒有元素...記住你綁定到jQuery對象中的元素引用時'.click()'運行,稍後添加元素不會向它們添加事件處理程序。 – 2010-09-12 17:24:41

+0

好的,沒錯。抱歉... – elektronikLexikon 2010-09-12 17:43:58

0

您可以將.click()處理程序document並檢查點擊的目標是你關心的元素,類似於如何.live()內部的行爲,像這樣:

$(function() { 
    var tagFlag = ''; 
    $("#a1").click(function(event) { 
     event.preventDefault(); 
     tagFlag = 'me'; 
    }); 
    $(document).click(function(e) { 
    if(tagFlag &&     //is it even set? 
     (e.target.id == tagFlag || $(e.target).closest('#'+tagFlag).length)) { 
      //do work here 
    } 
    }); 
}); 

You can give it a try here,給您的標記唯一的變化是增加了一個子元素(以顯示點擊冒泡/處理工作),並給予ANC hor a1 ID我認爲你打算讓它在問題中。

或者,如果您知道可以單擊的元素集,給他們一個類並將處理程序綁定到他們,像上面那樣檢查ID ...或者每次解除綁定類和重新綁定到特定ID ,有幾種方法可以解決這個問題:)