javascript
  • jquery
  • ruby-on-rails
  • ajax
  • ruby-on-rails-5.1
  • 2017-08-07 95 views 0 likes 
    0

    我有下面的代碼在頁面加載運行。我只想在用戶完成在文本框中寫入時運行它。函數在頁面加載時發送ajax請求

    代碼是:

    $(document).ready(function() { 
         $("#user_email").on('change keyup paste', function() { 
          $.post('/users/check_email?email=' + $("#user_email").val(), function (data) { 
           console.log(data); 
          }); 
         }); 
        }); 
    

    文本字段:

    <%= f.email_field :email, :type=>"email" %> 
    

    我不想在頁面加載,但是當用戶鍵入的東西在裏面,那麼它應該做的工作,阿賈克斯運行它。

    此外,如果用戶寫1或3個字符,它開始發送ajax。我需要檢查電子郵件,以便如何處理此用例?

    更新

    重要的問題是我在文本框救了我的電子郵件,類似的形式自動填寫信息,這樣當頁面加載時,它發送Ajax請求,並開始顯示XYZ電子郵件已經存在於系統中。 我不想在第一次加載頁面時發送ajax請求,但我想在有人編寫並完成寫入電子郵件時使其工作。

    +0

    我已更新我的問題,並感謝您的更正;) – LearningROR

    +0

    沒有想過自動填充,blech。 :-) –

    +0

    @LearningROR:編輯表示字面上沒有什麼比這個問題更相關。該代碼應該已經按照預期工作,除非在加載DOM後以某種方式填充輸入之後還有別的東西。您可以在「change」事件的回調中添加嚴格的檢查,但真正的電子郵件檢查應該發生在服務器端而不是客戶端(最終兩者)。您可能要遵循的過程是:1)編寫(或更好地搜索)電子郵件正則表達式。 2)獲取user_email值並檢查長度是否大於3. 3)兩次檢查後都要執行ajax調用。 – briosheje

    回答

    -1

    檢查輸入的值的長度,檢查它是否是> 3,只比發送一個AJAX請求:

    $(document).ready(function() { 
     
        $("#user_email").on('keyup change', function() { 
     
        var enteredValue = $(this).val(); 
     
        if (enteredValue.length > 3) { 
     
         $.post('/users/check_email?email=' + enteredValue, function(response) { 
     
         console.log(response); 
     
         }); 
     
        } 
     
        }); 
     
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <input id='user_email' type='text' />

    +0

    引用的代碼不會執行OP所說的內容,也不會切換到「focusout」做OP所說的他/她想要的內容 –

    +0

    這個問題說_用戶完成writing_時,是不是'focusout'? –

    +0

    它可能不是,它可能只是當他們停止輸入。 (他們描述的問題,我們真的無法幫助他們)(請注意,當用戶離開現場時'change'將被觸發,不需要'focusout',即使沒有任何變化也會觸發。) –

    -2

    試試這個代碼:

    $(document).ready(function() { 
        $("#user_email").on('change keyup paste', function() { 
         $.post('/users/check_email', { email: $("#user_email").val()}, 
          function(data){ 
           console.log(data); 
         }).fail(function(){ 
           console.log("error"); 
         }); 
        }); 
    }); 
    
    +0

    爲什麼?你改變了什麼?你爲什麼改變它?代碼轉儲不是有用的*答案。另外請注意,OP對回調的使用非常好。 –

    +0

    我添加了更多的細節問題。謝謝 – LearningROR

    相關問題