javascript - jQuery 将代码合并到一个函数中

标签 javascript jquery

是否可以合并下面两段代码。如果您查看每个部分,您会发现它们几乎相同。我还有另外 3 或 4 段代码,它们也相同。我想知道是否有一种更简洁的方法可以使用相同的代码?

$("#agencies").on("click", ".applyClick", function(event) {
    event.stopPropagation();
    event.preventDefault();
    var target = $(this);
    var currentParent = $(this).closest('tr');
    var id = currentParent.attr('id');
    var items = $("input,select,textarea", currentParent);
    var strData = items.serialize() + '&id=' + id;
    $.post("agencies.php", strData, function(data) {
        var data = $.parseJSON(data);

        if(data.redirect_location){
            window.location = data.redirect_location;
        }
        else{
            var type = data.type;
            var result = $.map(data, function(val,index) {
                if(index != 'type'){
                    var str = val;
                }
                return str;
            }).join("<br>");

            if(type == 'error'){
                alert(result);
            }
            else{
                $("div#messages").html('<div class="'+ type +'-message">' + result + '</div>').slideDown("slow");
                closeRow('quit', target);
            }
        }
    });
});

$("#builders").on("click", ".applyClick", function(event) {
    event.stopPropagation();
    event.preventDefault();
    var target = $(this);
    var currentParent = $(this).closest('tr');
    var id = currentParent.attr('id');
    var items = $("input,select,textarea", currentParent);
    var strData = items.serialize() + '&id=' + id;
    $.post("builders.php", strData, function(data) {
        var data = $.parseJSON(data);

        if(data.redirect_location){
            window.location = data.redirect_location;
        }
        else{
            var type = data.type;
            var result = $.map(data, function(val,index) {
                if(index != 'type'){
                    var str = val;
                }
                return str;
            }).join("<br>");

            if(type == 'error'){
                alert(result);
            }
            else{
                $("div#messages").html('<div class="'+ type +'-message">' + result + '</div>').slideDown("slow");
                closeRow('quit', target);
            }
        }
    });
});

最佳答案

我建议像这样向您的按钮添加属性

<input type="button" data-url="agencies" id="agencies" />
<input type="button" data-url="builders.php" id="builders" />

和类似的代码

$("#agencies, #builders").on("click", ".applyClick", function(event) {
    var url = $(this).attr('data-url');
    ....
    $.post(url, strData, function(data) {
    ...
    ...
});

关于javascript - jQuery 将代码合并到一个函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29368524/

相关文章:

javascript - tinyMCePopup 中的tinyMCE

javascript - 更新/检索函数中的私有(private)计数器

jquery - 为什么加载动态对话框后找不到div标签?

javascript - 我还应该在 jQuery 插件闭包中确保 undefined 吗?

jquery - NodeJS、Express 显示来自 AJAX POST 的 HTML 页面响应

javascript - 检查数组是否恰好包含一组特定的整数

javascript - 这个 JavaScript 语法是做什么的?

javascript - 从 JSON 获取的数据未更新

javascript - MVC 5 ASP.Net FORM 提交()函数不工作

javascript - 我如何让图像在悬停时显示 YouTube 视频