0

我的代码有一个小而奇怪的问题。基本上我有一个页面,当它被调用时它运行一个函数并显示一个列表。

function showlist (arg) {

var len = arg;
if (len == 0) {
    $('#adminlist').empty();
    $('#adminlist').append('<li>No records found!</li>')
    $('#adminlist').append('<li><a id="newadmin">Add New..</a></li>')
            $('#adminlist').listview("refresh");
} else {
    // some other list

};

};

该列表有一个 if 子句,如果“长度为 0”则显示一个列表,如果它的其他内容显示另一个列表。

我有一个 Jquery Mobile Popup,它是通过单击列表中的一项来触发的。

$("#newadmin").on('click', function(event) {

    $("#adminname").val("");
    $("#popupNewAdmin").popup({overlayTheme: "a"});
    $("#popupNewAdmin").popup("open")

    $( "#save_new_admin_btn" ).on('click', function(){
        var newadminname = $("#adminname").val();
        var newadminnametrim = $.trim(newadminname);

        console.log('New Admin Name: ' + newadminnametrim);
    })

});

触发时,弹出窗口会清除输入文本框,当我单击“save_new_admin_btn”按钮时,它会在控制台上输出文本框中的文本。

问题是,如果我在单击按钮几次后关闭关闭并重新打开弹出窗口,下次单击该按钮时它会输出大量条目。

我希望我让自己足够清楚。

提前致谢。:)

4

2 回答 2

1

问题是您每次单击#newadmin 时都会添加一个事件处理程序

如果在单击#newadmin 之前不显示保存按钮,则将第二个事件置于范围之外并为其提供更高的选择器。

$("#newadmin").on('click', function(event) {

    $("#adminname").val("");
    $("#popupNewAdmin").popup({overlayTheme: "a"});
    $("#popupNewAdmin").popup("open")



});

$( document ).on('click', "#save_new_admin_btn",  function(){
        var newadminname = $("#adminname").val();
        var newadminnametrim = $.trim(newadminname);

        console.log('New Admin Name: ' + newadminnametrim);
    })
于 2012-11-07T17:36:47.900 回答
0

您正在嵌套您的事件..将内部点击事件移到外部..而且您似乎动态添加元素..因此通过将事件附加到静态父容器来委托此类事件。

$("body").on('click',"#newadmin", function(event) {

    $("#adminname").val("");
    $("#popupNewAdmin").popup({overlayTheme: "a"});
    $("#popupNewAdmin").popup("open")
});

$( "body" ).on('click',"#save_new_admin_btn", function(){
        var newadminname = $("#adminname").val();
        var newadminnametrim = $.trim(newadminname);

        console.log('New Admin Name: ' + newadminnametrim);
    })
于 2012-11-07T17:38:09.297 回答