Javascript проблема с массивом флажков, когда выбран только один элемент - PullRequest
0 голосов
/ 26 января 2011

У меня есть форма с флажками, эти флажки хранят там значение в массиве, если отмечены таким образом:

<input type='checkbox' name='listaction[]' value='2010102909103530'>

При отправке я проверяю, какие флажки были отмечены, и что-то с этим делаю.

Моя проблема возникает, когда выбран только один элемент, тогда listaction - это не массив, а просто строка ...

Как мне это обработать?

Все начинается с отправкикнопка, которая запускает desubmit ()

Это функции обработки:

    function desubmit()
        {
        if(get_args()==false) {alert("U hebt geen treinen geselecteerd!");return false;}
        if(labelling(true)) return false;
        }
        function Check(chk)
        {
        for (i=0; i < chk.length; i++) chk[i].checked=document.ListActionForm.Check_ctr.checked ;
        }
        function labelling(s)
        {
        notrains="U hebt geen treinen geselecteerd!"
        selectval=document.ListActionForm.la.options[document.ListActionForm.la.selectedIndex].value;
        if(selectval=='exportoptions') {popUpWin('form.php?exportconfig=1','console3',470,470);}
        else if(selectval=='newlabel'&&!s) {jPrompt('Nieuwe Lijst:','Default', 'Maak nieuwe lijst (Max 20 karakters)', function(r) {if(r) {if(r.length>20){alert("Gekozen naam lijst mag maximum 20 tekens lang zijn (Overige tekens worden automatisch verwijderd)");r=r.substr(0,20);};document.ListActionForm.newlabel.value=r;document.getElementById('shownewlabel').innerHTML='[ Nieuwe Lijst: '+r+' ]';}});document.getElementById('popup_prompt').maxlength=5;}
        else if(selectval=='export:pdf') {if(arg=get_args()) get_page('/PDF/pdf.php','ids',arg);else alert(notrains);}
        else if(selectval=='export:csv') {if(arg=get_args())get_page('?export=csv','ids',arg);else alert(notrains);}
        else if(selectval=='export:xlsapp') {if(arg=get_args())get_page('?export=excelvbs','ids',arg);else alert(notrains);}
        else if(selectval=='export:xlsapptxt') {if(arg=get_args())get_page('?export=excelvbstxt','ids',arg);else alert(notrains);}
        else return false;
        return true;
        }
    function get_args()
        {
        s=chkboxa2str(document.ListActionForm['listaction[]']);
        if(s.length<8)return false;
        else return s;
        }
        function chkboxa2str(chkbox_a) { 
        var list = ""; 
        for(var i = 0; i < chkbox_a.length; i++){ if(chkbox_a[i].checked) { list += chkbox_a[i].value + " "; } } 
        return list; 
        }

Ответы [ 3 ]

1 голос
/ 26 января 2011

Вы можете проверить, является ли это строкой, и обработать ее другим способом.Используйте instanceOf для этого:

if(listaction instanceOf String) ...
0 голосов
/ 27 января 2011

Чтобы сделать это намного проще, я создал полностью работающую html-страницу, где ошибка представляет себя.

Чтобы смоделировать проблему, просто запустите ее один раз с двумя элементами html input checkbox -> отметьте один флажок и нажмите отправить -> это работает -> Теперь удалите одно поле флажка ввода и установите оставшиеся флажки и отправьте -> Bamm не работает ...

<html>
<head>
            <script>
            function Check(chk)
            {
            for (i=0; i < chk.length; i++) chk[i].checked=document.ListActionForm.Check_ctr.checked ;
            }
        function desubmit()
            {
            if(get_args()==false) {alert("$t_notrains_selected");return false;}
            if(labelling(true)) return false;
            }
            function labelling(s) {return true;}
        function get_args()
            {
            s=chkboxa2str(document.ListActionForm['listaction[]']);
            if(s)alert(s);
            if(s.length<8)return false;
            else return s;
            }
            function chkboxa2str(chkbox_a) { 
            var list = ""; 
                for(var i = 0; i < chkbox_a.length; i++){ if(chkbox_a[i].checked) { list += chkbox_a[i].value + " "; } }
            return list; 
            }
            </script>
</head>
<body>
<form action="?h=1296078874" method="post" name="ListActionForm" onsubmit="return desubmit()">
<input type='checkbox' name='listaction[]' value='2010102909103530'> Testbox 1<br>
<input type='checkbox' name='listaction[]' value='2010102909103532'> Testbox 2<br>
<input type="Submit" name="Submit" value="Versturen" >
</form>
</body>
</html> 
0 голосов
/ 27 января 2011

Я сейчас полностью потерян ...

Я добавил эту функцию для проверки типа моего массива

        function test (obj) {
        var type = typeof obj;
        if (type == 'object') {
        if (obj.getDate) return 'Date';
        if (obj.split) return 'String';
        return object;
        }
        return type;
        }

и я поместил строку отладки с этой функцией в функцию get_args следующим образом: функция get_args () { test (document.ListActionForm ['listaction []']); s = chkboxa2str (document.ListActionForm [ 'listaction []']); if (s.length <8) возвращает false; иначе вернуть s; } </p>

И вдруг массив распознается только тогда, когда выбран только один элемент (я полагаю, как строка), но больше не при выборе нескольких флажков

Тестовая линия даже ничего не делает ....

Это ошибка?

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