Я совершенно новый с JQuery, но Google в настоящее время является моим лучшим другом с конструированием кода. Код ниже немного длинный, и мне интересно, если a) я сделал это правильно (все работает отлично) и б) есть ли лучший способ сделать это? Я уверен, что есть более простые методы для достижения того, что мне нужно, но код, который я собрал, делает то, что ему нужно. Полагаю, я просто прошу критиковать то, что я узнал.Рефакторинг функций в jQuery
$(window).load(function() {
window.$order = "GetData.asp";
GetData();
window.$ord == '';
$("#descn").hide();
$("#desc").hide();
$("#desct").hide();
});
$("#asc").click(function(){
window.$order = "GetData.asp?order=asc";
GetData();
$("#desc").show();
$("#asc").hide();
});
$("#desc").click(function(){
window.$order = "GetData.asp?order=desc"
GetData();
$("#desc").hide();
$("#asc").show();
});
$("#ascn").click(function(){
window.$order = "GetData.asp?no=asc";
GetData();
$("#descn").show();
$("#ascn").hide();
});
$("#descn").click(function(){
window.$order = "GetData.asp?no=desc"
GetData();
$("#descn").hide();
$("#ascn").show();
});
$("#asct").click(function(){
window.$order = "GetData.asp?test=asc";
GetData();
$("#desct").show();
$("#asct").hide();
});
$("#desct").click(function(){
window.$order = "GetData.asp?test=desc"
GetData();
$("#desct").hide();
$("#asct").show();
});
function GetData() {
$.getJSON(window.$order, function(data){
if (data[0].name == 'none') {
$('#output').html("<div id='alert'>None Available</div>");
} else {
var len = data.length;
html = '<table class="tbl small">'
$time = 0
for (var i = 0; i< len; i++) {
$time = (parseInt($time)+parseInt(data[i].time));
if (data[i].overdue == "Yes") {
html = html + '<tr style="background: #FF0000">'
} else if (data[i].status == "RE ASSES") {
html = html + '<tr style="background: #D0C0C0">'
} else{
html = html + '<tr>'
}
html = html + '<td class="border col1">'+data[i].line+'</td>'
html = html + '<td class="border col2">'+data[i].no+'</td>'
html = html + '<td class="border col3">'+data[i].desc+'</td>'
html = html + '<td class="border col4">'+data[i].loc+'</td>'
html = html + '<td class="border col5">'+data[i].time+'</td>'
html = html + '<td class="border col6">'+data[i].lastcal+'</td>'
html = html + '<td class="border col7">'+data[i].frequency+'</td>'
html = html + '<td class="border col8">'+data[i].status+'</td>'
if (data[i].external == "E") {
html = html + '<td class="border col9">✔</td>'
} else {
html = html + '<td class="border col9"></td>'
}
html = html + '</tr>'
}
html = html + '</table>'
$('#output').html(html);
var monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
var d = new Date();
$('#tottime').html('Total time outstanding for ' + monthNames[d.getMonth()] + ' : ' + $time);
}
});
}
Моя единственная забота в том, что я делаю вещи длинного путь вокруг, например, функции #asc клик, например, - я не уверен, что лучшим способом достижения этой цели без использования функции для каждого методов щелчка.
Также; внутри цикла for мне пришлось вручную установить цвет фона с помощью if else, поскольку просто попытка использовать .css ('background', 'red') не работает, но то, что я здесь сделал.
Большое спасибо за ваше время и, пожалуйста, не стесняйтесь указать на какие-либо проблемы.
I Wouldn 't хранить URL-адрес в 'window. $ order', а скорее передавать его как аргумент' GetData() '. Поместив его в 'window. $ Order', вы вводите состояние, на которое полагается GetData()', что плохо и сложно отлаживать. – fiskeben