2012-10-01 82 views
1

是否可以在對象(oop)中定義點擊事件? 我對此很陌生。 我一直在嘗試了以下內容:(一simplyfied代碼(沒有DIV等CSS))oop:單擊事件

function menu_item(menu_name){ 
    this.menu_name=menu_name; 

    this.create = function(){ 
     $('body').html("<div id=" + menu_name + " />"); 
    }; 

    $('#' + menu_name).on('click',function(){ 
     alert (menu_name); 
    }); 
} 

menu_item("test"); 
menu_item.create(); 

現在,當我在DIV上單擊給定MENU_NAME的ID, 我想提醒的名稱(作爲測試),但這是行不通的... 這甚至可能嗎?

+1

幾件事情:雖然,沒錯,這_can_來完成,這是遠遠好習慣:'變種富=新MENU_ITEM( 'foobar的'); var bar = new menu_item('foobar');'會導致問題。此外:約定規定構造函數以大寫字母開頭,但最重要的是:您的構造函數創建一個對象,最好將其留在那裏。構造函數不應該混淆DOM。一個物體只應該自己打擾,而不是在那裏_什麼。最後:你正在定義函數和創建閉包(可能不知道它),具體如下:'alert(menu_name);'不會按預期執行 –

+0

謝謝。我意識到第一個問題...我將不得不使用相同的ID元素...在它上面工作。 我可以告訴你我想用這個編碼完成什麼: 我想輕鬆地創建多個菜單項,當點擊後移動,然後在某個點打開以顯示一些可信度。 在原始代碼中,我有更多的對象屬性: menu_item(menu_name,menu_link,menu_target,x_offset,y_offset,x_target,y_target,how_fast,x_size,y_size) 真的是一個糟糕的主意嘗試這樣做? 提示歡迎,因爲這是我的第一個類似OOP的編碼... Badankt! – Nomistake

回答

2

是的,這是可能的。但是,在代碼中看不到任何OOP構造函數 - 您將其稱爲函數。

您的問題似乎是,你有那個id的元素,當你試圖將事件偵聽器,或呼叫添加到您的create方法將其覆蓋。

使用此:

function MenuItem(name){ 
    this.menu_name = name; 

    this.create = function() { 
     var el = $("<div id=" + menu_name + " />"); 
     el.on('click',function(){ 
      alert (menu_name); 
     }); 
     $('body').append(el); 
    }; 
} 

var menu = new MenuItem("test"); 
menu.create(); 
+0

只是一秒,試一試 – Nomistake

+0

所以,用我的話來解釋一下, 的訣竅就是創建元素(var el)使其存在,然後附加事件處理函數(on('click',..) 我認爲我的代碼是一樣的,但maby不同的是,你創建了一個變量... – Nomistake

+0

不,你的代碼確實選擇了'$('#'+ menu_name)',並且在調用'menu_item'時附加了處理程序,當調用'create'時,*覆蓋*所有的東西 – Bergi