제 형식에는 zend_form_element_textarea가 있습니다. 이 요소에 대해이 같은 발리의 StringLength를 추가젠드 양식 카운트 다운 문자가있는 TextArea와 StringLength Validator - 다른 계산
$this->addElement('textarea', 'text', array('label' => 'F_MESSAGE_SMS_TEXT', 'required' => true, 'class' => 'fieldLiveLimit', 'limit' => 160));
$this->text->addValidator('StringLength', false, array('max' => 160));
와 나는 스크립트 자바 스크립트 쇼 라이브 카운트 다운 문자 사용
//Text field or text area limit - get limit by field parameter
$(".fieldLiveLimit").each(function() {
var characters = $(this).attr('limit');
var remaining = calcDifference(characters, $(this).val());
if ($('.limitCounter').length > 0) {
$(this).after($('.limitCounter').first().clone());
$(this).next('.limitCounter').children('span').html(remaining);
} else {
$(this).after($("<div class='limitCounter'>" + translate('L_LIMIT_COUNTER', [remaining]) + "</div>"));
}
checkClassCounter(remaining, $(this));
$(this).bind('textchange', function (event, previousText) {
remaining = calcDifference(characters, $(this).val());
checkClassCounter(remaining, $(this));
if ($(this).val().length > characters) {
$(this).val($(this).val().substr(0, characters));
} else {
$(this).next('.limitCounter').children('span').html(remaining);
}
});
function calcDifference(characters, value) {
return characters - parseInt(value.length);
}
function checkClassCounter(remaining, element) {
if (parseInt(element.val().length) == 0) {
element.next(".limitCounter").hide();
} else {
element.next(".limitCounter").show();
if (remaining <= 10) {
element.next(".limitCounter").addClass('red-message');
} else {
element.next(".limitCounter").removeClass('red-message');
}
}
}
});
이 한 가지를 제외하고 잘 작동합니다. 텍스트 영역 안에 새 행이 있으면 유효성 검사기는 새 행을 두 문자로 계산하고 JS 스크립트는 하나로 계산합니다. 누가 틀렸습니까? 나는 젠드 밸리데이터를 생각합니다. 그러나 그것은 정말로 이상한 것처럼 보이고 당신에게 물어 봅니다!
단지 야생 추측 : 행간 문자의 차이, 즉 "\ n"대 "\ r \ n"의 차이와 관련이있을 수 있습니다. 그러나 이것은 시스템마다 다르며 javascript와 zend lib가 동일한 시스템에서 실행되기 때문에 서로 다르지 않아야합니다. 들여다 볼만한 가치가 있을지도 모릅니다. – Pankrates