簡體   English   中英

Javascript onclick事件針對ID觸發,但不針對類

[英]Javascript onclick event firing for id but not for class

我對Java語言還很陌生,並且正在嘗試獲得一種“單擊放大”效果,其中單擊放大的圖像會再次縮小它。 通過將縮略圖替換為原始圖像來進行放大。 我也想稍后使用來自數據庫的圖像進行幻燈片播放。

為了做到這一點,我進行了一個測試,在其中替換了表明可以通過類進行擴展的id,並且我還使用了全局變量,以便可以跟蹤所使用的url。 不確定這是最佳做法,但我尚未找到更好的解決方案。

第一部分工作正常,我的圖像沒有任何變化,值也根據“ alert”語句進行了更新。 但是,第二部分,帶有該類的那部分永遠不會觸發。

我在做什么錯(除了很可能的許多不良做法)?

如果不是直接更改id(而不是直接更改id(用#image_enlarged等替換.image_enlarged等)),而是要調用第一個函數,即帶有id的函數,但會輸出更新的id,這很令人困惑。

var old_url = "";

$(function(){

   $('#imageid').on('click', function ()
        {       
        if($(this).attr('class')!='image_enlarged'){
            old_url = $(this).attr('src');
            var new_url =  removeURLPart($(this).attr('src'));
            $(this).attr('src',new_url); //image does enlarge
            $(this).attr('class',"image_enlarged");
            $(this).attr('id',"");
            alert($(this).attr('class')); //returns updated class
            }
        });

   $('.image_enlarged').on('click', function (){
       alert(1); //never triggered
       $(this).attr('src',old_url);
       $(this).attr('class',"");
       $(this).attr('id',"imageid");
   });
});

function removeURLPart(e){
   var tmp = e;
       var tmp1 = tmp.replace('thumbnails/thumbnails_small/','');
       var tmp2 = tmp1.replace('thumbnails/thumbnails_medium/',''); 
       var tmp3 = tmp2.replace('thumbnails/thumbnails_large/','');

   return tmp3;
} 

至於html,這確實很簡單:

<figure>
   <img src = "http://localhost/Project/test/thumbnails/thumbnails_small/image.jpg" id="imageid" />
   <figcaption>Test + Price thing</figcaption>
</figure>

<script>
   document.write('<script src="js/jquery-1.11.1.min.js"><\/script>');
</script>
<script type="text/javascript" src="http://localhost/Project/js/onclickenlarge.js"></script>

通過API: http//api.jquery.com/on/

.on()方法將事件處理程序附加到jQuery對象中當前 選定 元素

當您執行$('.image_enlarged').on(...)時,該類沒有元素。 因此,該功能未在任何元素中注冊。

如果要這樣做,則必須在更改類后注冊事件。

這是一個基於您的代碼的示例: http : //jsfiddle.net/8401mLf4/

但這會多次(每次單擊)注冊事件,這是錯誤的。 所以我會做類似的事情:

$('#imageid').on('click', function () {
    if (!$(this).hasClass('image_enlarged')) {
      /* enlarge */
    } else {
      /* restore */
    }
}

JSfiddle: http : //jsfiddle.net/8401mLf4/2/

嘗試使用:

addClass('image-enlarged')

代替:

.attr('class',"image_enlarged");

最好的方法是擁有一個小圖像類和一個大圖像類,它們都包含所需的CSS,然后根據要顯示的內容使用addClass()和removeClass。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM