2015-04-30 4 views
-2

У меня есть файл, на чье изменение вызывается две функции: f() и colorit(). Я хочу остановить функцию colorit(), если указанное условие не выполняется в f(). Однако, как только файл выбран, запускаются обе функции.Вызвать функцию внутри другой функции, а затем остановить ее javascript

<body> 
    <div class="dClass"> 
     <input type="file" class="iClass" /> 
    </div> 

    <script> 
     function f(){ 
      if() { 
       // if image selected does not meet requirements 
       // how to stop colorit(); function here ?? 
       return false; 
      } 
      else { 
       alert("done"); 
      } 
     } 

     $('.iClass').change(function() { 
      f(); // calling function f 
     }); 

     $(function() { 
      $('.dClass').colorit(); 
      //note: colorit() function also comes to action as soon as a file is selected through .iClass 
     }); 
    </script> 
</body> 
+0

Что такое 'colorit'? – Satpal

+0

Цвет - это функция изменения фона div, и я хочу, чтобы изображение не соответствовало условиям, которые не выполняются в качестве фона – user4845219

+0

... и ваша функция colorit запускается 'onload' ... это цикл или что-то? 0_o –

ответ

0

Remove -

$(function() { 
    $('.dClass').colorit(); 
} 

Если вы хотите только colorit() работать, если f() успешно.

Определение f() как -

function f(obj){ 
    if() { // if image selected does not meet requirements 
     // how to stop colorit(); function here ?? 
     return false; 
    } 
    else { 
     obj.colorit(); 
     alert("done"); 
    } 
} 

Так что вы можете начать colorit с объектом, если sicceeds.

И называют f() как -

$('.iClass').change(function() { 
    f($('.dClass')); // calling function f 
}); 

Другой способ -

function f(obj){ 
    if() { // if image selected does not meet requirements 
     // how to stop colorit(); function here ?? 
     return false; 
    } 
    else { 
     obj.data('fdone', 1); 
     alert("done"); 
    } 
} 

И

$('.iClass').change(function() { 
    f($('.dClass')); // calling function f 
    if($(this).data('fdone') == 1) { 
     $('.dClass').colorit(); 
    } 
}); 

И -

<input type="file" class="iClass" data-fdone='0' /> 
+0

Да, кажется, достойный shud дать ему попробовать – user4845219

+0

Не работает, colorit() не работает – user4845219

+0

Вы получаете предупреждение? –

0

Вы можете принудительно остановить выполнение функции, используя это в нем, не Рекомендуемые нами, но это способ

throw new Error('This is not an error. This is just to abort javascript'); 
+0

Что это за новый? – user4845219

+0

Оператор throw выдает определенное пользователем исключение. Выполнение текущей функции прекратится (инструкции после того, как бросок не будет выполнен), и управление будет передано в первый блок catch в стеке вызовов. Если между функциями вызывающего абонента нет блокировки catch, программа завершится. – ZetCoby

+0

хорошо, что это не работает – user4845219

Смежные вопросы