$ .getScript - 使变量保持全局(所以外部文件会看到它),同时将其保留在提交函数

时间:2017-02-10 16:23:33

标签: javascript jquery html

我正在努力解决以下问题:我在提交之前已经进行了大量验证,并且已将其放入单独的文件中,因此页面加载速度更快。现在,单击提交按钮,我希望此验证文件加载并验证所有内容 问题是,为了使带有验证的外部js文件工作,我需要看到该文件中的变量,并且每次我在输入中写入内容时都会更改(我有输入,如果我将其留空并按提交我需要验证检测它(它确实如此),但如果在此之后我在输入中写了一些内容 - 我需要'name'变量动态更改,以便在加载的js文件验证中可以正常工作)。
为此,我需要在每次按下提交按钮后生成所有变量,以便动态加载文件(如果按下提交按钮,则加载验证)以访问所需的变量(检测输入是否是我需要将变量写在范围之外 - 这样它们是全局的并且可以被加载的js文件访问。如果我在<script>标记之后立即声明变量,那么每次按下提交按钮时它们都不会动态更改。 (但至少加载了带验证的js文件可以看到它们)

HTML:

<form action="videator-c.php" method="post" enctype="multipart/form-data" id='save_img'>
 <input type='text' class='name_video_inp' style="text-align: center;flex: auto;" maxlength="80" style='flex:auto' name='video_name' placeholder="*Name your video here" />
<input type='submit' value='Finish uploading video' name='submit-b'/>

JS:

<script type="text/javascript">var name = $.trim($(".name_video_inp").val());
 $(document).ready(function(){
    $('#save_img').on('submit',function(){ var name = $.trim($(".name_video_inp").val());
         $.getScript("script/videator-b_validate.js").done(function(script, textStatus) {
    console.log( textStatus );
})
.fail(function(jqxhr, settings, exception) {
    console.log( 'error' );
});  
      return false;
    })

(我在范围和范围之外都声明了名称变量 - 如果超出范围 - 它会看到变量,但即使我在输入中写入内容并再次按下提交,它也总是空的,如果在范围内 - 名称变量也相应地更改输入值,但在外部文件中看不到。我需要两个:在外部JS文件中看到名称变量,如果我在输入中写出某些内容并且再次提交新内容,则会发生变化。

和EXTERNAL JS:

 console.log(name);

如果我尝试动态更新名称变量,每次输入更改都会在函数范围内声明,外部js文件将无法看到它:

$(".name_video_inp").change(function(){var name = $.trim($(".name_video_inp").val()); console.log(name);}) 

这是完美运行的工作js,因为我没有动态加载文件,但它已经包含在那里(但它太长了):

     $('#save_img').submit(function(){ 
        var lang_u = $('#lang_u option:selected').val();
        var lev_u = $('#lev_u option:selected').val();
           if(!$.trim($(".name_video_inp").val())){
          $('.hint').fadeIn(); 
          $('.hint').html('Please, name the video.')
          $('.hint').css('background','#fbf3b4');
          setTimeout(function() {$('.hint').fadeOut('fast');}, 3000);
          console.log('empty name');
          return false;}
        if($('.input_img').val() == '')
        { 
          $('.hint').fadeIn(); 
          $('.hint').html('Please, generate a thumbnail to the video by playing video at the desired position.')
          $('.hint').css('background','#8ced64');
          setTimeout(function() {$('.hint').fadeOut('fast');}, 3000);        
          return false;
        }      
        if (!$.trim($(".des").val())){
          $('.hint').fadeIn(); 
          $('.hint').html('Please, provide some description.')
          $('.hint').css('background','#ccfbb4');
          setTimeout(function() {$('.hint').fadeOut('fast');}, 3000);
          console.log('empty des');return false;}
        if(lang_u == 'Language' || lev_u == 'Level')
        {
          $('.hint').fadeIn(); 
          $('.hint').html('Please, select the Language and the Level.');
          setTimeout(function() {$('.hint').fadeOut('fast');}, 3000);   
          return false;   
        }
    })

所以总的来说,我努力包括按下按钮上的外部文件并使其正常工作 - 这样所有变量都可以“工作”,就像它在js文件中而不是外部一样。
到目前为止,我能看到的唯一解决方案是每次按下提交后都声明名称变量:

 $('#save_img').on('submit',function(){ var name = $.trim($(".name_video_inp").val());

然后有些人如何让它全球化?

0 个答案:

没有答案