2010-07-29 91 views
0

獲取此功能可以驗證更改密碼錶單中的兩個字段,而且它在IE8中似乎不起作用。 FF,Opera,Safari和Chrome工作。Javascript密碼更改表單驗證在IE8上不起作用

function chk_form_pw() 
{ 
if(document.getElementById('new_passwd').value == '') 
{ 
    alert("<?php _e('Please enter New Password') ?>"); 
    document.getElementById('new_passwd').focus(); 
    return false; 
} 
if(document.getElementById('new_passwd').value.length < 5) 
{ 
    alert("<?php _e('Please enter New Password minimum 5 chars') ?>"); 
    document.getElementById('new_passwd').focus(); 
    return false; 
} 
if(document.getElementById('cnew_passwd').value == '') 
{ 
    alert("<?php _e('Please enter Confirm New Password') ?>"); 
    document.getElementById('cnew_passwd').focus(); 
    return false; 
} 
if(document.getElementById('cnew_passwd').value.length < 5) 
{ 
    alert("<?php _e('Please enter Confirm New Password minimum 5 chars') ?>"); 
    document.getElementById('cnew_passwd').focus(); 
    return false; 
} 
if(document.getElementById('new_passwd').value != document.getElementById('cnew_passwd').value) 
{ 
    alert("<?php _e('New Password and Confirm New Password should be same') ?>"); 
    document.getElementById('cnew_passwd').focus(); 
    return false; 
} 
} 

這是形式:

<form name="registerform" id="registerform" action="<?php echo get_option('siteurl').'/?page=account&chagepw=1'; ?>" method="post"> 
<p><label><?php _e('New Password'); ?> <span class="indicates">*</span></label></p> 
<p><input type="password" name="new_passwd" id="new_passwd" class="lostpass_textfield" /></p> 
<p><label><?php _e('Confirm New Password'); ?> <span class="indicates">*</span></label></p> 
<p><input type="password" name="cnew_passwd" id="cnew_passwd" class="lostpass_textfield" /></p> 
<p><input type="submit" name="Update" onclick="return chk_form_pw();" value="<?php _e('Update Password') ?>" class="btn grey"/></p> 
</form> 

這裏是chagepw = 1兩件事:

<?php 
if($_POST) 
{ 
    if($_REQUEST['chagepw']) 
    { 
     $new_passwd = $_POST['new_passwd']; 
     if($new_passwd) 
     { 
      $user_id = $current_user->data->ID; 
      wp_set_password($new_passwd, $user_id); 
      $message1 = "Password Changed successfully.You need to sign back in."; 
     } 

    }else 
    { 
     $user_id = $userInfo['ID']; 
     $user_add1 = $_POST['user_add1']; 
     $user_add2 = $_POST['user_add2']; 
     $user_city = $_POST['user_city']; 
     $user_state = $_POST['user_state']; 
     $user_country = $_POST['user_country']; 
     $user_postalcode = $_POST['user_postalcode']; 

     $buser_add1 = $_POST['buser_add1']; 
     $buser_add2 = $_POST['buser_add2']; 
     $buser_city = $_POST['buser_city']; 
     $buser_state = $_POST['buser_state']; 
     $buser_country = $_POST['buser_country']; 
     $buser_postalcode = $_POST['buser_postalcode']; 
     $user_address_info = array(
          "user_add1"  => $user_add1, 
          "user_add2"  => $user_add2, 
          "user_city"  => $user_city, 
          "user_state" => $user_state, 
          "user_country" => $user_country, 
          "user_postalcode"=> $user_postalcode, 
          "buser_name" => $_POST['buser_fname'].' '.$_POST['buser_lname'], 
          "buser_add1" => $buser_add1, 
          "buser_add2" => $buser_add2, 
          "buser_city" => $buser_city, 
          "buser_state" => $buser_state, 
          "buser_country" => $buser_country, 
          "buser_postalcode"=> $buser_postalcode, 
          ); 
     update_usermeta($user_id, 'user_address_info', serialize($user_address_info)); // User Address Information Here 
     $userName = $_POST['user_fname'].' '.$_POST['user_lname']; 
     $updateUsersql = "update $wpdb->users set user_nicename=\"$userName\", display_name=\"$userName\" where ID=\"$user_id\""; 
     $wpdb->query($updateUsersql); 
     $message = "Information Updated successfully."; 
    } 
} 
$userInfo = $General->getLoginUserInfo(); 
$user_address_info = unserialize(get_user_option('user_address_info', $user_id)); 
$user_add1 = $user_address_info['user_add1']; 
$user_add2 = $user_address_info['user_add2']; 
$user_city = $user_address_info['user_city']; 
$user_state = $user_address_info['user_state']; 
$user_country = $user_address_info['user_country']; 
$user_postalcode = $user_address_info['user_postalcode']; 
$display_name = $userInfo['display_name']; 
$display_name_arr = explode(' ',$display_name); 
$user_fname = $display_name_arr[0]; 
$user_lname = $display_name_arr[2]; 
$buser_add1 = $user_address_info['buser_add1']; 
$buser_add2 = $user_address_info['buser_add2']; 
$buser_city = $user_address_info['buser_city']; 
$buser_state = $user_address_info['buser_state']; 
$buser_country = $user_address_info['buser_country']; 
$buser_postalcode = $user_address_info['buser_postalcode']; 
$bdisplay_name = $user_address_info['buser_name']; 
$display_name_arr = explode(' ',$bdisplay_name); 
$buser_fname = $display_name_arr[0]; 
$buser_lname = $display_name_arr[2]; 

if($_SESSION['redirect_page'] == '') 
{ 
    $_SESSION['redirect_page'] = $_SERVER['HTTP_REFERER']; 
} 
if(strstr($_SESSION['redirect_page'],'page=checkout')) 
{ 
    $login_redirect_link = get_option('siteurl').'/?page=checkout'; 
} 
?> 
+1

也許你應該顯示html以及函數的調用方式。 – 2010-07-29 20:07:21

+0

謝謝愛斯基摩人。 這是它,希望它可以幫助更好=) – Patotter 2010-07-29 22:15:55

+0

你是否得到任何錯誤?請進一步描述「不工作」的情況。 – 2010-07-29 22:23:25

回答

0

更平滑的解決方案將是jQuery的。您可以加載加載動畫,將錯誤/正確的顏色(如紅色/綠色)放入並根據表單發生的情況簡化打印文本。

下載jQuery的距離:http://docs.jquery.com/Downloading_jQuery

然後你在這樣的HTML代碼插入:

<script type="text/javascript" src="jquery.js"> 
</script> 

然後你就可以有一個valid.js這樣的:

$(document).ready(function() { 
    var validatefield = $('#validatefield'); 
    $('#validatefield').keyup(function() { 
    var t = this; 
if (this.value != this.lastValue) { 
    if (this.timer) clearTimeout(this.timer); 
    validatefield.html('<img src="images/Here_you_can_put_your_gif_animation" 

    alt="Loading..." 
    height="16" width="16"/>'); 

    this.timer = setTimeout(function() { 
    $.ajax({ 

     url: 'check_field.php', 
     data: 'action=check_field&field=' + encodeURIComponent(t.value), 
     dataType: 'json', 
     type: 'post', 
success: function (j) { 
    if (j.ok) { 
      validatefield.html(j.msg); 
    } 
    else if ($("#validatefield").val() == "") 
    {  
    validatefield.html(''); 
    } 

    else { 
     validatefield.html(j.msg); 
    } 
    } 
    }); 
    }, 200); 

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

然後在check_field.php中,有這個;

echo json_encode(check_field($_POST['field'])); 

function check_field($field) { 
$fieldSum = stripslashes(strip_tags(trim(htmlspecialchars($field)))); 
$response = array(); 

if (strlen($fieldSum) > 15) { 
$response = array(
    'ok' => false, 
    'msg' => "The field characters were over 15!");  
} 
else 
     { 
$response = array(
    'ok' => true, 
    'msg' => "Correct"); 
} 
return $response;   
} 

的ID #validatefield是,你必須以打印出來的東西創建HTML代碼中的ID。

例子:

<div id="validatefield">Here comes the text etc, from the valid.js</div> 
+0

感謝安格斯, 想保持它沒有JQuery,但絕對是更好的選擇。 要使用此通知驗證腳本: http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/ 知道更好嗎? 謝謝! – Patotter 2010-07-30 09:24:49

+0

有很多可供選擇的選擇;採取你想要的。儘管如此,我更願意選擇不是基於絕對定位的替代方案。 順便說一句:新的SO,接受並upvote你的答案。它可以幫助您獲得快速響應 – Curtain 2010-07-31 18:30:14