2010-01-06 2 views
1

Я пытаюсь проверить текстовое поле, чтобы пользователь не мог добавить новое пустое сообщение через текстовую область tinyMCE.validate textarea using tinyMCE - jquery

Но это просто не работает.

Что я делаю неправильно?

JS:

var msg = $("#msg"); 
     if(msg.val() == ''){ 
      $("#msg_error").html("* Can't add an empty message"); 
     } 

TEXTAREA

<textarea rows="5" cols="35" id="msg"></textarea> 

ответ

1

текстовое поле в TinyMCE не всегда чисто пустым, althuogh вы ничего не видите, TinyMCE автоматически добавляет HTML в текстовое поле. Это означает, что textarea будет содержать html-код, например <p> </p>. Что нужно сделать, так это использовать функцию php strip_tags, чтобы удалить html и затем проверить пустоту. Удачи.

$texttostrip = strip_tags($_POST['formdata']); 
if($texttostrip != "") echo "Empty Field"; 

Это будет означать использование ajax-запросов для проверки данных время от времени.

+0

thx alot, этот ответ полезен :) – william

+1

Вы можете сохранить вызовы ajax, используя эквивалент 'strip_tags' PHP в JavaScript [доступно здесь] (http://phpjs.org/functions/strip_tags/), а также упомянутый в мой [ответ] (http://stackoverflow.com/a/24408485/216084). –

3

Да, я нашел решение !!

Здесь речь идет о:

var content = tinyMCE.get('msg').getContent(); // msg = textarea id 

if(content == "" || content == null){ 
      $("#msg_error").html("* Can't add an empty message"); 
     } 
+1

Благословит вас Бог! haha –

1

Решение

var msg = strip_tags(tinyMCE.get('msg').getContent({format: 'raw'})); // msg = textarea id 

Где strip_tags() является обязательной пользовательской функцией, как указано ниже:

function strip_tags(input, allowed) { 
     // discuss at: http://phpjs.org/functions/strip_tags/ 
     // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
     // improved by: Luke Godfrey 
     // improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
     // input by: Pul 
     // input by: Alex 
     // input by: Marc Palau 
     // input by: Brett Zamir (http://brett-zamir.me) 
     // input by: Bobby Drake 
     // input by: Evertjan Garretsen 
     // bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
     // bugfixed by: Onno Marsman 
     // bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
     // bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
     // bugfixed by: Eric Nagel 
     // bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 
     // bugfixed by: Tomasz Wesolowski 
     // revised by: Rafał Kukawski (http://blog.kukawski.pl/) 
     // example 1: strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>'); 
     // returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>' 
     // example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>'); 
     // returns 2: '<p>Kevin van Zonneveld</p>' 
     // example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>"); 
     // returns 3: "<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>" 
     // example 4: strip_tags('1 < 5 5 > 1'); 
     // returns 4: '1 < 5 5 > 1' 
     // example 5: strip_tags('1 <br/> 1'); 
     // returns 5: '1 1' 
     // example 6: strip_tags('1 <br/> 1', '<br>'); 
     // returns 6: '1 <br/> 1' 
     // example 7: strip_tags('1 <br/> 1', '<br><br/>'); 
     // returns 7: '1 <br/> 1' 

     allowed = (((allowed || '') + '') 
     .toLowerCase() 
     .match(/<[a-z][a-z0-9]*>/g) || []) 
     .join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>) 
     var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi, 
     commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi; 
     return input.replace(commentsAndPhpTags, '') 
     .replace(tags, function($0, $1) { 
      return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : ''; 
     }); 
    } 

И потом, вы можете выполнить требуемые валидаций по переменному msg например чтобы проверить, если он является пустым:

if (msg == '') { 
    // TinyMCE is blank 
} 

Как это работает

Используя встроенную функцию TinyMCE с опцией 'raw' (link) возвращает HTML и текст, но и с юридическими лицами, как &nbsp; преобразуются в пространство, которое помогает в лучшей проверке, например &nbsp; в открытом тексте (после обрезки также) завершится с ошибкой пустой строки.

Затем пользовательская функция strip_tags удаляет HTML-теги, чтобы предоставить вам простой текст, на котором тесты проверки могут выполняться с большим успехом.

Кредиты

Это решение было вдохновлено от @william's answer, пройдя через documentation of TinyMCE, и с некоторой помощью phpjs.org.

Смежные вопросы