Функция Javascript не вызывается из onclick - PullRequest
0 голосов
/ 23 декабря 2011

Это заставляет меня вырывать волосы. Кнопка на сайте имеет onclick=method() и не вызывает метод. Метод должен захватить все флажки, проверить их проверенное состояние и заполнить массив chk[] значениями true / false. Затем WebMethod берет этот массив, разбивает его на три меньших массива и проверяет комбинации. Насколько я могу судить, кнопка никогда не вызывает метод для начала.

Страница aspx:

<fieldset id="Fieldset">
     <button onclick="SendForm();">Send</button>
     &nbsp;
     <button onclick="CancelForm();">Cancel</button>
</fieldset>
</form>
<asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" EnablePartialRendering="true" runat="server" />

<script type="text/javascript">
    function SendForm() {
        var email = $get("txtEmail").value;
        var elLength = form1.elements.length;
        var chk = new [42];
        for (i = 0; i < elLength; i++) {
            var count = 0;
            var type = form1.elements[i].type;
            if (type == "checkbox") {
                if (form1.elements[i].checked) {
                    chk[count] = true;
                }
                else {
                    chk[count] = false;
                }
                count++;
            }
            else {
            }
        }
        PageMethods.SendForm(email, chk, OnSucceeded, OnFailed);
    }
</script>

код за вызываемым им методом:

[WebMethod]
public static void SendForm(string email, bool[] chk)
{
    bool[] desc = new bool[14];
    bool[] loc = new bool[14];
    bool[] other = new bool[14];
    for (int i = 0; i < 14; i++)
    {
        int count = i * 3;
        desc[i] = chk[count];
        loc[i] = chk[count + 1];
        other[i] = chk[count + 2];

    }
    if (string.IsNullOrEmpty(email))
    {
        throw new Exception("You must supply an email address.");
    }
    else
    {
        if (IsValidEmailAddress(email))
        {
            for (int i = 0; i < 14; i++)
            {
                if (desc[i])
                {
                    if ((loc[i]) && (other[i]))
                    {
                        throw new Exception("Invalid, two parameters selected");
                    }
                    else if (loc[i])
                    {
                        // do stuff
                    }
                    else if (other[i])
                    {
                       // do stuff
                    }
                    else
                    {
                        throw new Exception("Invalid, every exemption must have at least one reason selected");
                    }
                }
                else
                {
                    throw new Exception("No exemptions have been selected");
                }
            }
        }
        else
        {
            throw new Exception("You must supply a valid email address.");
        }
    }
}

EDIT !!: Запуск страницы с помощью следующего сценария вместо предыдущего сценария работает как шарм. Понятия не имею, почему предыдущий не сработал.

<script type="text/javascript">
    function SendForm() {
        var email = $get("txtEmail").value;
        var elLength = form1.elements.length;
        for (i=0;i< elLength;i++) {
            var type = form1.elements[i].type;
            if (type == "checkbox" && form1.elements[i].checked) {
                alert("true!");
            }
            else {
                alert("false!");
            }
        }
        PageMethods.SendForm(email, chk, OnSucceeded, OnFailed);
    }
</script>

Ответы [ 3 ]

0 голосов
/ 23 декабря 2011

Я получил пару советов для вас

1) var elLength = form1.elements.length;// попробуем использовать это -> document.getElementByID ("form1");иногда это не несовместимо с различными веб-браузерами

2) почему бы вам не использовать jquery?, как показано ниже Как использовать jQuery для вызова веб-службы ASP.NET?

0 голосов
/ 05 января 2012

Запуск страницы с помощью следующего сценария вместо предыдущего сценария работает как шарм. Понятия не имею, почему предыдущий не сработал.

<script type="text/javascript">
    function SendForm() {
        var email = $get("txtEmail").value;
        var elLength = form1.elements.length;
        for (i=0;i< elLength;i++) {
            var type = form1.elements[i].type;
            if (type == "checkbox" && form1.elements[i].checked) {
                alert("true!");
            }
            else {
                alert("false!");
            }
        }
        PageMethods.SendForm(email, chk, OnSucceeded, OnFailed);
    }
</script>
0 голосов
/ 23 декабря 2011

Вместо вызова вашей функции, как

 <button onclick="SendForm();">Send</button>

попробуйте назвать это так

<button onclick="javascript:return SendForm();">Send</button>
...