1

我正在使用下面的代码来比较通过和确认密码文本字段。它工作正常,但问题是如果输入不匹配的密码,它会显示错误“密码不匹配”,然后如果我匹配密码,它会在旧错误旁边显示“密码匹配”。所以它的显示就像'密码不匹配密码匹配'(请参阅图片以供参考..错误图片

. 如何在显示消息之前清除跨度。

   $(confPassword).live('blur', function() {
    alert(password.value);
    if (password.value != 'Password') {
        alert("hi");
        if (password.value == confPassword.value) {
            alert("match");
            setupConfirmControl(confPassword, astConfPassword, lblConfPassword, true);
        }
        else {
            alert("dont match");
            setupConfirmControl(confPassword, astConfPassword, lblConfPassword, false);
        }
    }
});

function setupConfirmControl(elemObj, id, labelTxt, addToParent) {
    var ConfirmPass = document.createElement('span');
    ConfirmPass.setAttribute('class', 'ClsConfirmPass');
    ConfirmPass.setAttribute('id', 'span' + id);
    ConfirmPass.innerHTML = '';
    if (addToParent) {
        ConfirmPass.innerHTML = 'Passwords match';
        elemObj.parentNode.insertBefore(ConfirmPass, elemObj);
    }
    else {
        ConfirmPass.innerHTML = 'Passwords do not match';
        elemObj.parentNode.insertBefore(ConfirmPass, elemObj);
    }
    showConfirmPassWord(id);
}
4

1 回答 1

1

问题是您每次都在函数中创建一个新的,只需检查一个跨度是否存在,如果存在,则使用该跨度: span

function setupConfirmControl(elemObj, id, labelTxt, addToParent) {
    var ConfirmPass = document.getElementById('span' + id);
    if (!ConfirmPass){
        ConfirmPass = document.createElement('span');
        ConfirmPass.setAttribute('class', 'ClsConfirmPass');
        ConfirmPass.setAttribute('id', 'span' + id);
        ConfirmPass.innerHTML = '';
    }

    if (addToParent) {
        ConfirmPass.innerHTML = 'Passwords match';
        elemObj.parentNode.insertBefore(ConfirmPass, elemObj);
    }
    else {
        ConfirmPass.innerHTML = 'Passwords do not match';
        elemObj.parentNode.insertBefore(ConfirmPass, elemObj);
    }
    showConfirmPassWord(id);
}

这有效地分配了先前创建的span元素(id等于'span' + id,假设它们对于同一字段的错误消息是常量)。然后,如果id文档中没有该元素(!ConfirmPass),则创建该元素。

这样,任何先前写入的内容span都将通过设置innerHTML.

于 2012-08-06T20:39:31.217 回答