2010-11-08 88 views
2


我有一個輸入字段,我想動態驗證用戶輸入時......我使用Codeigniter,我相信我有一些URI問題...讓我告訴你代碼...與Codeigniter問題的jQuery驗證

HTML/PHP:
<input type="text" id="username"> <span id="validateUsername"></span>

的jQuery:

$(document).ready(function() { 
    var validateUsername = $('#validateUsername'); 
     $('#username').keyup(function() { 
     var t = this; 

     if (this.value != this.lastValue) { 
      if (this.timer) clearTimeout(this.timer); 
      validateUsername.removeClass('error').html('<img src="<?php echo site_url("public/images"); ?>/ajax-loader.gif" height="16" width="16" /> checking availability...'); 
      this.timer = setTimeout(function() { 
       $.ajax({ 
        url: '<?php echo base_url(); ?>register/check_user/' + t.value, 
        dataType: 'json', 
        type: 'POST', 
        success: function (j) { 
         validateUsername.html(j.msg); 
        } 
       }); 
      }, 200); 

      this.lastValue = this.value; 
     } 
    }); 
}); 

我笨控制器有一個非常簡單的函數的N:

function check_user($username) { 
    // var_dumping stuff goes here 
} 

在那裏,我只是想不同的var_dump的東西(如$ _ SERVER,$ _REQUEST,$用戶名),但我認爲我的腳本甚至沒有達到這個控制器...

我試圖在我的jQuery腳本中更改url: '<?php echo base_url(); ?>register/check_user/' + t.value,行,但似乎沒有組合起作用。例如:
url: '<?php echo site_url('register/check_user/'); ?>' + t.value,
url: 'index.php/register/check_user/' + t.value,
url: 'register/check_user/' + t.value,

...不管我盡我validateUsername跨度將只顯示 「檢查可用性」 的消息。

我在Chrome,Safari和IE8上試用我的腳本。 PHP版本是5.3.0和jQuery是1.4.2 ...

任何想法可能是錯誤的嗎?

感謝您提前提供任何幫助!

回答

4

我看到你的代碼可能存在多個問題:

是否正確設置了路由?

在你笨routes,請執行下列操作:

$route['register/check_user/(:any)'] =" register/check_user/$1"; 

在你的CodeIgniter控制器,使用這種訪​​問變量:

function check_user() { 
    $username = $this->uri->segment(3); 
    var_dump($username); 
    // var_dumping stuff goes here 
} 

此外,我會建議使用jQuery Text Change event,它真是棒極了對我來說,而不是使用setTimeouts和keyup。

例子:

$('#username').bind('textchange', function() { 
    $.post('<?php echo base_url(); ?>register/check_user/' + this.value, function(data) { 
     $('#validateUsername').html(data); 
    }); 
}); 
+0

你好,感謝您的幫助!是的,我實際上忘記了路由,但是當我設置它時,它仍然不起作用: - /我檢出了jQuery文本更改,現在我正在使用該插件...非常優雅,容易:)感謝您的鏈接:) – errata 2010-11-08 23:57:53

+0

沒問題,很高興我可以幫助:) – tpae 2010-11-09 00:00:40

+1

+1,但值得一提的是'function check_user(){$ username = $ this-> uri-> segment(3);'也可以用'function check_user ($用戶名)'。如果你在某個階段改變結構,例如'module/controller/method/$ 1'(uri結構改變,意味着3將是無效的),這還有額外的好處。 – Ross 2010-11-09 09:08:33