javascript: значение флажка остается 1 вместо 0, если не отмечено - PullRequest
1 голос
/ 21 ноября 2011

Привет, я недавно изучаю телефонный разрыв. У меня есть этот код ниже. Мое намерение состоит в том, чтобы получить пользовательскую запись из mysql, а затем выдать какую-нибудь галочку, где пользователь может обновить и затем написать напрямую в mysql.

Процесс работает нормально, просто забавно то, что значение флажка, даже если я сниму флажок, оно все равно останется 1 вместо 0

Подскажите, пожалуйста, где я ошибся? К вашему сведению, я новичок в javascript, так что, скорее всего, это просто ошибка js, которая вызывает это.

<!DOCTYPE html>
<html>
<head>
    <title>PhoneGap Ajax Sample</title>
    <script type="text/javascript" src="phonegap.js"></script>
    <script type="text/javascript">
        function appReady(){
        var myId = sessionStorage.getItem('myId');

        var ajax = new XMLHttpRequest();
            ajax.open("GET","domain/system_setup.php?user_id="+myId+"",true);
            ajax.send();

        ajax.onreadystatechange=function(){
                if(ajax.readyState==4 && (ajax.status==200||ajax.status==0)){
                    eval('var data = ' + ajax.responseText + ';');
                    var theResults = data.dataset;
                    var theHtml = '';
                    for(var i=0;i<theResults.length;i++){
                    if (theResults[i].system_1 == 1) {
                        var theHtml = theHtml + '<input name="system_1" type="checkbox" id="system_1" value="1" checked="checked" />MS Excel';
                    } else {
                        var theHtml = theHtml + '<input name="system_1" type="checkbox" id="system_1" value="0" />MS Excel';
                    }   
                    if (theResults[i].system_2 == 1) {
                        var theHtml = theHtml + '<BR><input name="system_2" type="checkbox" id="system_2" value="1" checked="checked" />MYOB';
                    } else {
                        var theHtml = theHtml + '<BR><input name="system_2" type="checkbox" id="system_2" value="0" />MYOB';
                    }   
                    if (theResults[i].system_3 == 1) {
                        var theHtml = theHtml + '<BR><input name="system_3" type="checkbox" id="system_3" value="1" checked="checked" />Quickbooks';
                    } else {
                        var theHtml = theHtml + '<BR><input name="system_3" type="checkbox" id="system_3" value="0" />Quickbooks';
                    }
                    if (theResults[i].system_4 == 1) {
                        var theHtml = theHtml + '<BR><input name="system_4" type="checkbox" id="system_4" value="1" checked="checked" />Xero';
                    } else {
                        var theHtml = theHtml + '<BR><input name="system_4" type="checkbox" id="system_4" value="0" />Xero';
                    }                           
                    if (theResults[i].system_5 == 1) {
                        var theHtml = theHtml + '<BR><input name="system_5" type="checkbox" id="system_5" value="1" checked="checked" />SAP';
                    } else {
                        var theHtml = theHtml + '<BR><input name="system_5" type="checkbox" id="system_5" value="0" />SAP';
                    }   
                    if (theResults[i].system_6 == 1) {
                        var theHtml = theHtml + '<BR><input name="system_6" type="checkbox" id="system_6" value="1" checked="checked" />Navision';
                    } else {
                        var theHtml = theHtml + '<BR><input name="system_6" type="checkbox" id="system_6" value="0" />Navision';
                    }   
                    if (theResults[i].system_7 == 1) {
                        var theHtml = theHtml + '<BR><input name="system_7" type="checkbox" id="system_7" value="1" checked="checked" />Others';
                    } else {
                        var theHtml = theHtml + '<BR><input name="system_7" type="checkbox" id="system_7" value="0" />Others';
                    }                                                                               

                    }
                }   
        document.getElementById('main').innerHTML = theHtml;
        }
    }

    function updateSystem (form) {
        var system_1 = form.system_1.value;
        var system_2 = form.system_2.value;
        var system_3 = form.system_3.value;
        var system_4 = form.system_4.value;
        var system_5 = form.system_5.value;
        var system_6 = form.system_6.value;
        var system_7 = form.system_7.value;

        var ajax = new XMLHttpRequest();
            ajax.open("GET","domain/system_setup_update.php?user_id="+sessionStorage.getItem('myId')+"&system_1="+system_1+"&system_2="+system_2+"&system_3="+system_3+"&system_4="+system_4+"&system_5="+system_5+"&system_6="+system_6+"&system_7="+system_7+"",true);
            ajax.send();            

            ajax.onreadystatechange=function(){
                if(ajax.readyState==4 && (ajax.status==200||ajax.status==0)){
                    eval('var data = ' + ajax.responseText + ';');
                    var theResults = data.dataset;
                    for(var i=0;i<theResults.length;i++){   
                        var theRefresh = window.location = "system_setup.html";
                    }   
                    document.getElementById('refresh').innerHTML = theRefresh;          
                    }
                }
        }
        document.addEventListener("deviceready", appReady, false);

    </script>

    <style type="text/css">
        .line {padding-bottom:2px;}
        .title {float: left; width: 80px;}
        .content {margin-left: 90px; }
        .clear{clear:both;}
    </style>
</head>
<body>
<h1>System Used</h1>

<FORM NAME="myform" ACTION="" METHOD="GET">
    <div id="main">
    </div>
<INPUT TYPE="button" NAME="button" Value="Update" onClick="updateSystem(this.form)">
</FORM>
    <div id="refresh">
    </div>  
</body>
</html>

Спасибо заранее!

Ответы [ 3 ]

4 голосов
/ 22 ноября 2011

Вы должны проверить снова * булево свойство checked вместо value элемента. В вашем случае value не имеет никакого реального значения, так как оно останется с тем, что вы дали при создании разметки, и не изменится, независимо от того, сколько раз вы нажмете на флажок.

0 голосов
/ 22 ноября 2011

Гончуки верны, вам нужно что-то вроде

var radio = document.getElementById('YOUR_RADIO_ID')

if (radio.checked)
{
    // do something here
}

Или в jQuery

$('#system_1 option:checked')

Выберет любой параметр, отмеченный для system_1

Но я уверен, что если вы измените

var system_1 = form.system_1.value;
var system_2 = form.system_2.value;
var system_3 = form.system_3.value;
var system_4 = form.system_4.value;
var system_5 = form.system_5.value;
var system_6 = form.system_6.value;
var system_7 = form.system_7.value;

К

var system_1 = form.system_1.checked;
var system_2 = form.system_2.checked;
var system_3 = form.system_3.checked;
var system_4 = form.system_4.checked;
var system_5 = form.system_5.checked;
var system_6 = form.system_6.checked;
var system_7 = form.system_7.checked;

ваш скрипт должен выбрать правильное радио.

Дайте мне знать, если это поможет.

0 голосов
/ 22 ноября 2011

Я не уверен, что вы действительно хотите иметь:

  • один флажок на элемент
  • несколько флажков на элемент, поэтому можно ставить отметки 0 и 1 одновременно
  • группа переключателей для выбора 0 или 1 для элемента

Код для первого решения будет выглядеть так:

<input type="checkbox" name="itemname" />

var result = form.itemname.checked ? "1" : "0";

Код для третьего решения будет выглядетьвот так:

<input type="radio" name="itemname" value="1" /> Yes
<input type="radio" name="itemname" value="0" /> No

var buttons = form.itemname; // Array!
var result = false;
for (var i=0; i<buttons.length; i++)
    if (buttons[i].checked)
        result = buttons[i].value;

Код, который вы разместили выше, является решением два, и он работает как мой второй пример: forms.itemname это массив, но может быть проверено несколько вариантов.

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