簡體   English   中英

jQuery-將事件偵聽器添加到動態創建的按鈕

[英]jquery - add event listener to dynamically created button

我嘗試了多種解決方案,但沒有一個可行,而且我不明白為什么...

基本上,我有一個按鈕,它將一個新的表單行添加到頁面中,並帶有名稱,開始和顏色字段以及一個保存按鈕。

我需要做的是在保存單擊時保存表單字段。

這是我要使用的代碼,但無法正常工作:

var i = 0;
var addCounter = $("#addCounter");

addCounter.on("click", function () {
    ++i;
    var body = $("body");
    var save = $('#save-' + i);
    var name = $("#counterName-" + i);
    var date = $("#counterStart-" + i);
    var color = $("#counterColor-" + i);
    var status = $("#status-" + i);

    var templateToAppend = '<li class="list-group-item">' +
        '<div class="form-inline">' +
        '<div class="form-group">' +
        '<label for="counterName-' + i + '">Counter Name</label>' +
        '<input type="text" id="counterName-' + i + '" placeholder="Counter name"/></div>' +
        '<div class="form-group">' +
        '<label for="counterStart-' + i + '">Starting from:</label>' +
        '<input type="text" id="counterStart-' + i + '" placeholder="dd/mm/yy"/></div>' +
        '<div class="form-group">' +
        '<label for="counterColor-' + i + '">Counter Color:</label>' +
        '<input id="counterColor-' + i + '" class="jscolor"></div>' +
        '<button id="save-' + i + '" class="btn btn-primary">Save</button>' +
        '<div id="status-' + i + '"></div></div></li>';
    body.append(templateToAppend);
    save.click(function () {
        debugger;
        console.log("clicked on save: ", save);
        var localStorage = {
            id: i,
            counterName: name.value,
            counterDate: date.value,
            counterColor: color.value
        };

        console.log(localStorage);
    });
});

調試器永遠不會運行,我也不明白為什么。

你能幫我理解為什么嗎?

非常感謝

var save = $('#save-' + i);

在將按鈕添加到文檔之前,這行代碼正在執行。

save將是一個空數組。

那是因為您嘗試創建DOM中不存在的element的jquery對象。 您應該先附加元素,然后再通過選擇器獲取元素。 像這樣:

body.append(templateToAppend);
var save = $('#save-' + i);
var name = $("#counterName-" + i);
var date = $("#counterStart-" + i);
var color = $("#counterColor-" + i);
var status = $("#status-" + i);

還有一種更干凈的方式將事件附加到動態添加的元素上。 看看事件委托

將事件委派用於第二次點擊事件,將點擊事件置於第一次點擊事件之外

    $('body').on('click','.list-group-item btn',function () {
        console.log("clicked on save: ", $(this).attr('id'));
        var i =  $(this).attr('id').split('-')[1];
         var localStorage = {
        id: i,
        counterName: $("#counterName-" + i).val(),
        counterDate: $("#counterStart-" + i).val(),
        counterColor: $("#counterColor-" + i).val()
    };

    console.log(localStorage);
    });

暫無
暫無

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

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