0

チェックボックスの検証後にリクエストプロセスを停止するにはどうすればよいですか? チェックボックスが選択されていない場合は、リクエストを停止したい。以下のスクリプトは、チェックボックスが選択されていないことが検証されてもプロセスを停止しません。

function addNewItem(id) {
var i, chks = document.getElementsByName('itemCheckbox');
for (i = 0; i < chks.length; i++){
    if (chks[i].checked){
        return true;
    }else{
        alert('No item selected');
        return false;
    }
}else{

if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
} else {
    // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        document.getElementById("itemTable").innerHTML=xmlhttp.responseText;
        initPlayWidget();
    }
}

var itemCheckbox = document.forgetMeNotForm.itemCheckbox;
var selectedSong = "";

if (typeof itemCheckbox.length === 'undefined') {
    if (itemCheckbox.checked == true) {
        selectedSong = itemCheckbox.value + ",";
    }
} else {
    for (var i=0; i < itemCheckbox.length; i++) {
        if (itemCheckbox[i].checked) {
            selectedItm = selectedItm + itemCheckbox[i].value + ",";
        }
    }
} 

var type = document.getElementById("typeDropdown").value;
var monthValue = document.getElementById("monthDropdown").value;
var dayValue = document.getElementById("dayDropdown").value;
var startTime = document.getElementById("hrDropdown1").value + document.getElementById("minDropdown1").value;
var endTime = document.getElementById("hrDropdown2").value + document.getElementById("minDropdown2").value;
var itmId = document.getElementById("itmNumber").value;

xmlhttp.open("POST","/sites/" + domainName + "/themes/web/common/myLib.php" ,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("action=addItemRule&id="+id+"&selectedItm=" + selectedItm + "&type=" + type + "&monthValue=" + monthValue
    + "&dayValue=" + dayValue + "&startTime=" + startTime + "&endTime=" + endTime + "&itmId=" + itmId);

}
}

ありがとう。

4

2 に答える 2

0

新しい機能を追加できます

function isChecked(){
  var i, chks = document.getElementsByName('itemCheckbox');
  for (i = 0; i < chks.length; i++){
    if (chks[i].checked){
        return true;
    }else{
        alert('No item selected');
        return false;
    }
  }
}

メイン関数に改行を追加します

function addNewItem(id) {
  if (!isChecked())
    return;
  ...
于 2012-07-25T07:18:19.470 に答える
0

あなたのコードはコンパイルされません:

function addNewItem(id) {
var i, chks = document.getElementsByName('itemCheckbox');
for (i = 0; i < chks.length; i++){
    if (chks[i].checked){
        return true;
    }else{
        alert('No item selected');
        return false;
    }
}else{
^
|

この中括弧を削除してみてください

編集: また、2 つの一般的な else を 1 つの if にすることはできないため、コードを少し変更する必要があります。次のように、if 句の内容に 2 番目の else の内容を入れることができます。

function addNewItem(id) {
    var i, chks = document.getElementsByName('itemCheckbox');
    for ( i = 0; i < chks.length; i++) {
        if (chks[i].checked) {
            if (window.XMLHttpRequest) {
                // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else {
                // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    document.getElementById("itemTable").innerHTML = xmlhttp.responseText;
                    initPlayWidget();
                }
            }
            var itemCheckbox = document.forgetMeNotForm.itemCheckbox;
            var selectedSong = "";

            if ( typeof itemCheckbox.length === 'undefined') {
                if (itemCheckbox.checked == true) {
                    selectedSong = itemCheckbox.value + ",";
                }
            } else {
                for (var i = 0; i < itemCheckbox.length; i++) {
                    if (itemCheckbox[i].checked) {
                        selectedItm = selectedItm + itemCheckbox[i].value + ",";
                    }
                }
            }

            var type = document.getElementById("typeDropdown").value;
            var monthValue = document.getElementById("monthDropdown").value;
            var dayValue = document.getElementById("dayDropdown").value;
            var startTime = document.getElementById("hrDropdown1").value + document.getElementById("minDropdown1").value;
            var endTime = document.getElementById("hrDropdown2").value + document.getElementById("minDropdown2").value;
            var itmId = document.getElementById("itmNumber").value;

            xmlhttp.open("POST", "/sites/" + domainName + "/themes/web/common/myLib.php", true);
            xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xmlhttp.send("action=addItemRule&id=" + id + "&selectedItm=" + selectedItm + "&type=" + type + "&monthValue=" + monthValue + "&dayValue=" + dayValue + "&startTime=" + startTime + "&endTime=" + endTime + "&itmId=" + itmId);
        } else {
            alert('No item selected');
            return false;
        } 
    }
}

Edit2:また、リクエストを送信する前にすべてのチェックボックスをオンにしたい場合(およびリクエストを1回だけ送信する場合は、別の変数を使用できます:

function addNewItem(id) {
    var i, chks = document.getElementsByName('itemCheckbox'), valid = true;
    for ( i = 0; i < chks.length; i++) {
        if (!chks[i].checked) {
            valid = false;
        } 
    }

    if(valid) {
        // ...
        // do the request stuff here
        // ...
    } else {
        alert('No item selected');
        return false;
    } 
}
于 2012-07-25T07:25:41.510 に答える