2010-10-25 4 views
0

Мне нужна помощь для консолидации/сокращения кода ниже. Первоначально у меня было выпадающее меню, которое контролирует видимость div на основе ценности. Он работает onClick, но поскольку это страница базы данных, она не работает onLoad, поэтому мне пришлось добавить вторую логику. Любые предложения/ввод приветствуются.jquery click (function) onload

$(document).ready(function() { 
    var $caseStatus = $(this).find("#auth_status").val(); 
    //alert ($caseStatus); 
    if ($caseStatus === "1") { 
    $(".pendingClass").show(); 
    $(".authClass").hide(); 
    } 
    else if ($caseStatus === "2") { 
    $(".pendingClass").hide(); 
    $(".authClass").show(); 
    } 
    else { 
    $(".pendingClass").hide(); 
    $(".authClass").hide(); 
    } 

    // Show/Hide Divs for Authorization Status 
    $("#auth_status").click(function() { 
    if ($(this).val() === "0") { 
     $(".pendingClass").hide(); 
     $(".authClass").hide(); 
    } 
    else if ($(this).val() === "1") { 
     $(".pendingClass").show(); 
     $(".authClass").hide(); 
    } 
    else if ($(this).val() === "2") { 
     $(".pendingClass").hide(); 
     $(".authClass").show(); 
    } 
    }); 
}); 

ответ

2

Вы можете уменьшить свой код немного упростив свой if/else структуры (поскольку ничего, кроме "1" такого же шоу/результат шкура, а также просто вызвать обработчик вы связываете при первой загрузке страницы, как это:

$(function() { 
    $("#auth_status").click(function() { 
    var val = $(this).val(); 
    $(".pendingClass").toggle(val === "1"); 
    $(".authClass").toggle(val === "2"); 
    }).click(); 
}); 
+0

+1 Это более элегантно, чем моя версия. Но на самом деле '$ caseStatus' следует называть' caseStatus'. ;-) И выражение '$ (this) .val() ===" 1 ";' слишком упрощено, поскольку есть три случая. – Tomalak

+0

@ Томалак - лучше? :) Я не уверен, что означает '1' для статусов, но это должно быть названо этим статусом действительно, чтобы быть как можно более ясным. –

+0

@Tomalak - Woops, я читал, что '0' и' 2' были одинаковыми, вы правы, те шоу/шкуры разные, обновлены с исправлением. –

1
$(function() { 
    function toggleElements() { 
    var caseStatus = $("#auth_status").val(); 
    $(".pendingClass").toggle(caseStatus === "1"); 
    $(".authClass").toggle(caseStatus === "2"); 
    }; 

    toggleElements();       // initial call (on page load) 
    $("#auth_status").click(toggleElements); // manual call (on user click) 
}); 
0

Можно определить несколько объектов:

var authCtrl = { 
    '0': { show: null, hide: '.pendingClass, .authClass' }, 
    '1': { show: '.pendingClass', hide: '.authClass' }, 
    '2': { show: '.authClass', hide: '.pendingClass' } 
}; 

и аналогичным образом (в обратном направлении) для другого корпуса. Затем обработчик просто захватывает запись на основе этого значения поля и скрывает/показывает по указанию.

+0

Разве это не слишком много? :) –

+0

Ну, это зависит. Кодирование поведения в качестве таких данных отделяет «правила» от логики, действующей на правила. Обработчик, написанный для интерпретации таких простых данных (возможно, даже более обобщенных), потенциально может использоваться для многих подобных структур, которые отличаются только некоторыми частями. Я пытаюсь научить себя Теории категорий, поэтому в последнее время я привык думать так :-) – Pointy

+0

@Nick: Это позволит вам выполнить '$ (# auth_status). Change (function() {$. каждый (authCtrl [$ (this) .val()], function (k, v) {$ (v) [k]();});}); ':-D * (Но только тогда, когда все возможные значения '# auth_status' находятся в' authCtrl' ...) * – Tomalak