Почему не работает мой троичный оператор JavaScript? - PullRequest
0 голосов
/ 07 июня 2011
<script type="text/javascript">
    $(document).ready(function () {

        $('[type=button]').click(function () {
            var modelcount = $('#modelcount').val();
            modelcount++;
            if (modelcount >= 10) {
                $("#prodform").prepend('<div class="validation-summary-errors"><ul><li>Only 10 serial numbers can be added</li></ul></div>');
                $('[type=button]').attr("disabled", "disabled");
                $('[type=button]').removeClass().addClass('disabled');
            }
            else { //THIS BIT HERE!!!!!
                $(".entry").last().after().append('<div class="entry"><label for="HandHeldProducts_' + modelcount + '__SerialNumber">Serial Number</label><input' + ($.MyFunction($("#BothProducts"))) ? 'disabled = "disabled"' : '' + ' class="serial" id="HandHeldProducts_' + modelcount + '__SerialNumber" name="HandHeldProducts[' + modelcount + '].SerialNumber" placeholder="Serial Number" type="text" value="" /></div>')
                $('#modelcount').val(modelcount);
            }
        });

        $.MyFunction = function (elemnt) {
            return (elemnt.attr("checked") != "undefined" && elemnt.attr("checked") == "checked");
        };

    });
</script>

Ответы [ 2 ]

7 голосов
/ 07 июня 2011

Что вы делаете:

$(".entry").last().after().append(
    '<div class="entry"><label for="HandHeldProducts_' + 
    modelcount + 
    '__SerialNumber">Serial Number</label><input' +
    ($.MyFunction($("#BothProducts"))) ? 
        'disabled = "disabled"' : 
        '' + ' class="serial" id="HandHeldProducts_' + 
            modelcount + 
            '__SerialNumber" name="HandHeldProducts[' + 
            modelcount + 
            '].SerialNumber" placeholder="Serial Number" type="text" value="" /></div>'
)

В основном над остальной частью вашей конкатенации строк находится в блоке "else" троичного

Чтобы избежать этого, закройте ваш tenary в скобках.

Что вы хотите сделать:

$(".entry").last().after().append(
    '<div class="entry"><label for="HandHeldProducts_' + 
    modelcount + 
    '__SerialNumber">Serial Number</label><input' +
    (($.MyFunction($("#BothProducts"))) ? 
        'disabled = "disabled"' : 
        '') + 
    ' class="serial" id="HandHeldProducts_' + 
    modelcount + 
    '__SerialNumber" name="HandHeldProducts[' + 
    modelcount + 
    '].SerialNumber" placeholder="Serial Number" type="text" value="" /></div>'
)

Реальная проблема

Конкатенация строк, подобная этой, - *****.Используйте DOM или используйте шаблоны.

Ниже DOM: ( не проверено )

$(".entry").last().after().append(
    $("<div></div>", {
        "class": "entry"    
    }).append(
        $("<label></label>", {
            "label": "HandHeldProducts_" + modelcount + "__SerialNumber"
            "text": "Serial Number"
        })  
    ).append(
        $("<input/>", {
            "class": "serial",
            "id": "HandHeldProducts_" + modelcount + "__SerialNumber"
            "name": "HandHenldProducts[" + modelcount + "].SerialNumber",
            "placeholder": "Serial Number",
            "type": "text",
            "value": ""
        })
    )
);

if ($.MyFunction($("#BothProducts")) {
    $("#HandHeldProducts_" + modelcount + "__SerialNumber").attr("disabled", "disabled");
}
0 голосов
/ 07 июня 2011

Попробуйте разбить строку на биты, чтобы ее было легче понять:

var html = '<div class="entry">';
html += '<label for="HandHeldProducts_'+modelcount+'__SerialNumber">Serial Number</label>';
html +=  '<input'+($.MyFunction($("#BothProducts")) ? 'disabled = "disabled"' : '');
html += ' class="serial" id="HandHeldProducts_' + modelcount;
html += '__SerialNumber" name="HandHeldProducts[' + modelcount + '].SerialNumber"';
html +=' placeholder="Serial Number" type="text" value="" />';
html += '</div>';
$(".entry").last().after().append(html);
$('#modelcount').val(modelcount);

Я не видел ничего плохого, пока разбивал строку, но там могли быть лишние скобки. В общем, я думаю, что единственной проблемой здесь была чрезмерная длина строки - такой код трудно поддерживать в чистоте и отлаживать трудно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...