簡體   English   中英

我可以使用Javascript將兩個函數合並為一個嗎?

[英]Can I combine two functions into one using Javascript?

我有以下代碼想要簡化。 使用javascript和jQuery,有一種簡單的方法可以將這兩個功能結合在一起嗎? 大多數代碼是相同的,但是我不確定如何創建一個單獨的函數,該函數根據所單擊的內容而有所不同。

$(document).ready(function () {
    $('#ListBooks').click(ListBooks);
    $('#Create').click(Create);
});

function Create() {
    var dataSourceID = $('#DataSourceID').val();
    var subjectID = $('#SubjectID').val();
    var contentID = $('#ContentID').val();
    if (dataSourceID && dataSourceID != '00' && 
        subjectID && subjectID != "00" &&
        contentID && contentID != "00")
    {
        var e = encodeURIComponent,
            arr = ["dataSourceID=" + e(dataSourceID),
                   "subjectID=" + e(subjectID),
                   "contentID=" + e(contentID)];
        window.location.href = '/Administration/Books/Create?' + arr.join("&");
    } else {
        alert('Datasource, Subject and Content must be selected.');
    }
    return false;
}

function ListBooks() {
    var dataSourceID = $('#DataSourceID').val();
    var subjectID = $('#SubjectID').val();
    var contentID = $('#ContentID').val();
    if (dataSourceID && dataSourceID != '00' &&
        subjectID && subjectID != "00" &&
        contentID && contentID != "00") {
        var e = encodeURIComponent,
            arr = ["dataSourceID=" + e(dataSourceID),
                   "subjectID=" + e(subjectID),
                   "contentID=" + e(contentID)];
        window.location.href = '/Administration/Books/ListBooks?' + arr.join("&");
    } else {
        alert('Datasource, Subject and Content must be selected.');
    }
    return false;
}

這樣的事?

$(document).ready(function () {
    $('#ListBooks').click(function() { yourNewFunction('ListBooks'); });
    $('#Create').click(function() { yourNewFunction('Create'); });
});

yourNewFunction(type) {
  // code of both functions
  if ('ListBooks' == type) {
   // code for ListBook
  } else {
   // code for Create
  }
};

我嘗試將兩個函數都合並到一個事件觸發器中。

看看是否有幫助,如果我錯過了其他任何地方(這兩個代碼都不常見),我可以幫助您進行編輯。

$(document).ready(function () {
    $('#ListBooks').unbind('click').bind('click', function() {
        iClicked("list");
    });
    $('#Create').unbind('click').bind('click', function() {
        iClicked("create");
    });
});

var url_map = {
    'create':'/Administration/Books/Create',
    'list':'/Administration/Books/ListBooks'
};

function iClicked(trig) {
    if (!url_map[trig]) {
        alert("Unsupported event");
        return false;
    }
    var dataSourceID = $('#DataSourceID').val();
    var subjectID = $('#SubjectID').val();
    var contentID = $('#ContentID').val();
    if (dataSourceID && dataSourceID != '00' &&
        subjectID && subjectID != "00" &&
        contentID && contentID != "00")
    {
        var e = encodeURIComponent,
            arr = ["dataSourceID=" + e(dataSourceID),
                   "subjectID=" + e(subjectID),
                   "contentID=" + e(contentID)];
        window.location.href = url_map[trig] + '?' + arr.join("&");
    } else {
        alert('Datasource, Subject and Content must be selected.');
    }
    return false;
}

您需要根據您在$('#ListBooks')$('#Create')傳遞的ID,使函數執行不同的操作。 因此,您可以使用this.id來檢索值,而不是將id硬編碼到函數中。 調整了這一行:

$('#ListBooks').click(combinedFunction);

和這個

window.location.href = '/Administration/Books/'+ this.id + '?' + arr.join("&");

最終代碼:

$(document).ready(function () {
    $('#ListBooks').click(combinedFunction);
    $('#Create').click(combinedFunction);
});

function combinedFunction() {
    var divId = this.id;
    var dataSourceID = $('#DataSourceID').val();
    var subjectID = $('#SubjectID').val();
    var contentID = $('#ContentID').val();
    if (dataSourceID && dataSourceID != '00' && 
        subjectID && subjectID != "00" &&
        contentID && contentID != "00")
    {
        var e = encodeURIComponent,
            arr = ["dataSourceID=" + e(dataSourceID),
                   "subjectID=" + e(subjectID),
                   "contentID=" + e(contentID)];
        //Use this.id to retrive the value
        window.location.href = '/Administration/Books/'+ this.id + '?' + arr.join("&");
    } else {
        alert('Datasource, Subject and Content must be selected.');
    }
    return false;
}
function doBookAction(action) {
    var dataSourceID = $('#DataSourceID').val();
    var subjectID = $('#SubjectID').val();
    var contentID = $('#ContentID').val();
    if (dataSourceID && dataSourceID != '00' &&
        subjectID && subjectID != "00" &&
        contentID && contentID != "00") {
        var e = encodeURIComponent,
            arr = ["dataSourceID=" + e(dataSourceID),
               "subjectID=" + e(subjectID),
               "contentID=" + e(contentID)];
        window.location.href = '/Administration/Books/' + action + '?' + arr.join("&");
    } else {
        alert('Datasource, Subject and Content must be selected.');
    }
    return false;
} 

$('#ListBooks,#Create').click(function() { doBookAction($(this).attr('id')); });

暫無
暫無

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

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