Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как передать false через функцию? (https://javascript.ru/forum/misc/3076-kak-peredat-false-cherez-funkciyu.html)

Tend 16.03.2009 15:38

Как передать false через функцию?
 
Есть такая функция:
function check()
{
	var fnm = "";
	function checkf(fid)
	{
		fnm = document.getElementById(fid);
		if (fnm)
		{
			if (fnm.value.length < 2)
			{
				fnm.focus();
				// здесь нужно сделать так, чтобы функция check() возвратила false
			}
		}
	}
	checkf("country");
	checkf("city");
	checkf("address");
	checkf("post");
}


Что написать в функции checkf(), чтобы не она сама возвратила false, а чтобы false возвратила функция check()?

Gvozd 16.03.2009 15:43

function check()
{
    var fnm = "";
    function checkf(fid)
    {
        fnm = document.getElementById(fid);
        if (fnm)
        {
            if (fnm.value.length < 2)
            {
                fnm.focus();
                return false;
            }
            else
            {
                return true;
            }
        }
    }
    return 
    checkf("country") && 
    checkf("city") &&
    checkf("address") &&
    checkf("post");
}

function check()
{
    var fnm = "";
    function checkf(fid)
    {
        fnm = document.getElementById(fid);
        if (fnm)
        {
            if (fnm.value.length < 2)
            {
                fnm.focus();
                return false;
            }
            else
            {
                return true;
            }
        }
    }
    if !checkf("country") return false;
    if !checkf("city") return false;
    if !checkf("address") return false;
    if !checkf("post") return false;
    return true;
}

Dmitry A. Soshnikov 16.03.2009 16:08

Цитата:

Сообщение от Gvozd
if !checkf("country") return false;
if !checkf("city") return false;
if !checkf("address") return false;
if !checkf("post") return false;

А что, можно было оставить вариант Tend в этом случае, так даже наглядней:

Цитата:

Сообщение от Gvozd
return checkf("country") && checkf("city") && checkf("address") && checkf("post");

Единственное, что return нельзя оставлять без операнда в той же строке (из-за автоматической вставки точки с запятой), поэтому, это:

return
checkf("country") &&
...


неверно, а

return checkf("country") && ...
...


верно.

Gvozd 16.03.2009 16:21

Цитата:

Сообщение от Dmitry A. Soshnikov
А что, можно было оставить вариант Tend в этом случае, так даже наглядней:

честно говоря мой мозг ломается с утра в попытке понять эту фразу.
кажется ты решил что я процитировал код Tend?
на самом деле я просто привел два решения.
отличий по функциональности у них нету в принципе.
оба выкидываются по первому false

Цитата:

Сообщение от Dmitry A. Soshnikov
Единственное, что return нельзя оставлять без операнда в той же строке (из-за автоматической вставки точки с запятой),

автоматическая втсавка точек с запятой производится самим интепретатором?
или какими-нибудь пакерами.
надо запонмнить

ZoNT 16.03.2009 16:50

Цитата:

Сообщение от Gvozd
автоматическая втсавка точек с запятой производится самим интепретатором?
или какими-нибудь пакерами.

интерпретатором.

Dmitry A. Soshnikov 16.03.2009 16:55

Цитата:

Сообщение от Gvozd
отличий по функциональности у них нету в принципе.
оба выкидываются по первому false

да, естественно, нету, просто вариант Tend более "читаем", лаконичен и нагляден. Хотя, субъективно всё это, конечно.

Цитата:

Сообщение от Gvozd
на самом деле я просто привел два решения.

а, всё, пардон, не заметил =)

Цитата:

Сообщение от Gvozd
автоматическая втсавка точек с запятой производится самим интепретатором?

да, http://javascript.ru/ecma/part7#a-7.9

Tend 16.03.2009 16:55

Всем спасибо. :)

Gvozd 16.03.2009 16:55

ZoNT,
спасибо


Часовой пояс GMT +3, время: 10:07.