2015-01-10 44 views
0

我遇到了令人沮喪的問題。 我想在一個動態添加的輸入上添加一個點擊事件,但是我一直在努力。選擇一個特定的輸入並添加一個事件

要顯示一些代碼,這是我的初始視圖

<div class="js-item-list"></div> 

然後,用戶可以動態地添加數據,這個div然後填充例如像這樣(初始的div)

<div class="js-item-list"> 
    <div class="js-service-list-item> 
    <table> 
     <tr> 
     <td>Something</td> 
     <td><input type="text" class="js-consumption"></td> 
     </tr> 
    </table> 
    </div> 
    <div class="js-service-list-item> 
    <table> 
     <tr> 
     <td>Something</td> 
     <td><input type="text" class="js-consumption"></td> 
     </tr> 
    </table> 
    </div> 
    ... and so on ... 
</div> 

我想用jQuery爲所有輸入添加一個點擊事件,以便當用戶點擊輸入時,該特定輸入框的所有內容都將被選中。但我不知道如何使所有的建議將不勝感激,感謝名單:)

回答

1

使用jQuery的事件委託功能可能解決您的問題,試試這個:

$(".js-item-list").on("click" , "input.js-consumption" , function(){ 
    var domInput = this ; 
    var $input = $(this) ; 
    var value = $input.val(); 
    // to do 
}); 
+0

可悲的是它沒有..我已經嘗試過類似的東西,但沒有任何成功,我嘗試並在代碼中添加一個警報看看是否發生了什麼,但什麼都沒有發生.. – maetulj

+0

接受這個答案是最具描述性的。 至於我的問題,當我在我的一個函數 – maetulj

2

您可以使用委託方法爲新增或未來元素

refrence

$('.js-item-list').delegate('input', 'click', function(e) { 
    //some code here 
}) 

或更新版本> jQuery的1.7,你應該使用。對()

在jQuery 1.7,.delegate()已被取代由。對()方法

$('.js-item-list').on('input', 'click', function(e) { 
     //some code here 
    }) 
+0

應該指出'.delegate()'已經正式授權。相反,使用'.on()',即'$('.js-item-list')。on('click','input',function(e){...}' – Terry

+0

同意Terry那個。 on()應該被使用。這個答案與.delegate()可悲的是不工作:/ – maetulj

0

我假設你有一些按鈕,用戶點擊添加另一個「東西」。我還假設你有你的JS代碼$(".js-service-list-item").onclick(someAction)

該初始JS代碼僅適用於運行時存在該類的元素。這意味着每次將元素添加到列表中時,都需要重新應用onclick方法。

因此,我要做的就是將$(".js-service-list-item").onclick(someAction)代碼移動到您添加這些服務列表項的按鈕的onclick函數中。這樣,在每次創建新的元素時,你還會用它註冊onclick事件

1

您可以使用jQuery。 on函數,它在動態添加的html元素上工作。

$(".js-item-list").on("click", ".js-consumption" ,function() { 
    alert($(this).val()); 
}); 

的.js項列表是選擇器類,這是不會改變的這個動態僅內部元件將改變。

相關問題