2016-06-13 15 views
0

jQueryを使って簡単なチャットをしています。問題は形式ですか?タイプ "テキスト"の入力とボタンが含まれています。私のJSコードでは、テキストフィールドが空であればボタンを無効にし、テキストがいくつかあるときに有効にします。 私はfollowigコード持っていたとして、それが正常に働いていた:jQueryを使ってtinyMCEエディタからデータを保存する

home.html:

{% load staticfiles %} 
<html> 
<head> 
    <title>Public chat</title> 

    <!-- jQuery library --> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 

    <!-- JavaScript --> 
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 
</head> 

<body> 
    <!-- Here are the previous messeeges showed, it doesn't matter now--> 

    <form id="chat-form" method="post" action="/post/"> 
     <div id="chat-bottom" class="input-group"> 
      <input type="text" id="chat-msg" name="chat-msg" class="form-control"/> 
      <span class="input-group-btn"> 
       <input class="btn btn-default" id="send" type="submit" value="Send"/> 
      </span> 
     </div> 
    </form> 
</body> 

<script src="{% static 'chat.js' %}"></script> 
</html> 

chat.js:

$('#chat-form').on('submit', function(event){ 
    event.preventDefault(); 

    $.ajax({ 
     url : '/post/', 
     type : 'POST', 
     data : { msgbox : $('#chat-msg').val() }, 

     success : function(json){ 
      $('#chat-msg').val(''); 
      $('#msg-list').append('<li class="text-right list-group-item">' + json.msg + '</li>'); 
      var chatlist = document.getElementById('msg-list-div'); 
      chatlist.scrollTop = chatlist.scrollHeight; 
     } 
    }); 
}); 

function getMessages(){ 
    if (!scrolling) { 
     $.get('/messages/', function(messages){ 
      $('#msg-list').html(messages); 
      var chatlist = document.getElementById('msg-list-div'); 
      chatlist.scrollTop = chatlist.scrollHeight; 
     }); 
    } 
    scrolling = false; 
} 

var scrolling = false; 
$(function(){ 
    $('#msg-list-div').on('scroll', function(){ 
     scrolling = true; 
    }); 
    refreshTimer = setInterval(getMessages, 500); 
}); 

$(document).ready(function() {//here checking if the text field is empty 
    $('#send').attr('disabled','disabled'); 
    $('#chat-msg').keyup(function() { 
     if($(this).val() != '') { 
      $('#send').removeAttr('disabled'); 
     } 
     else { 
     $('#send').attr('disabled','disabled'); 
     } 
    }); 
}); 

私はテキストフィールド

<script type="text/javascript" src="{% static 'tiny_mce/tiny_mce.js' %}"></script> 

<script type="text/javascript"> 
tinyMCE.init({ 
    theme : "advanced", 
    selector : "#chat-msg" 
}); 
</script> 
にTinyMCEのを追加しようとしました

「送信」ボタンは常に無効になっています。 reaultはまだ同じであるVUT

$(document).ready(function() { 
    $('#send').attr('disabled','disabled'); 
    $('#chat-msg').keyup(function() { 
     tinyMCE.triggerSave(); 
     if($(this).val() != '') { 
      $('#send').removeAttr('disabled'); 
     } 
     else { 
     $('#send').attr('disabled','disabled'); 
     } 
    }); 
}); 

$('#chat-form').on('submit', function(event){ 
    event.preventDefault(); 
    tinyMCE.triggerSave(); 

    $.ajax({ 
     //here the same code as above in the same function 
    }); 
}); 

と、この:私は関数はこのように見えたここGet value of tinymce textarea with jquery selectorのように実行しようとしました。最初は、ドキュメント(http://archive.tinymce.com/wiki.php/API3:method.tinymce.Editor.getContent)ではコンテンツのクリーンアップと言われていたので、getContent()を使用したくなかった(多くの似たような質問にあるように)。最後に、私はそれを何の効果もなく試しました。

私はjQueryとTinyMCEの両方に新しいので、私は何か明白でないことを信じています。テキストフィールドのコンテンツを取得するためにここでchat.jsを変更する必要がありますか?

答えて

1

最初に変更するのは、お客様のkeyup機能です。 TinyMCEがページに挿入されると、元のフォーム要素(あなたの場合は<input>)は表示されなくなります。ブラウザツールを使用すると、TinyMCEが一連の<div>とを効果的に隠すことがわかります<input>。一度これを行うあなたはdocument.readyに持っているコードは、これまでにトリガされません。

//This won't trigger anything with TinyMCE on the page 
$('#chat-msg').keyup(function() { 
    tinyMCE.triggerSave(); 
    if($(this).val() != '') { 
     $('#send').removeAttr('disabled'); 
    } 
    else { 
    $('#send').attr('disabled','disabled'); 
    } 
}); 

を代わりにあなたはTinyMCEをのinit関数にkeyupまたはchange機能を追加することができます。

tinymce.init({ 
    selector: 'textarea', 
    ... 
    setup: function (editor) { 
     editor.on('change', function() { 
      //Perform your updating of the button here 
     }); 
     editor.on('keyup', function() { 
      //Perform your updating of the button here 
     }); 

    } 
}); 
1

私の場合tinyMCE.triggerSaveで();動作していないので、onChangeイベントで手動でコンテンツを設定しました。あなたはこのようにすることができます。

<script type="text/javascript"> 
tinyMCE.init({ 
    theme : "advanced", 
    selector : "#chat-msg" 
    setup: function (editor) { 
     editor.on('change', function() { 
      var content = tinyMCE.activeEditor.getContent().trim(); 
      var tinyMceElement = tinyMCE.get(editor.editorId).getElement(); 
      $(tinyMceElement).html(content); 
     }); 
}); 
</script> 

注:VAR含量= tinyMCE.activeEditor.getContent()(トリム)。 var tinyMceElement = tinyMCE.get(editor.editorId).getElement();

これは、古いバージョンのtinyMceのテキストコンテンツとdom要素を取得する方法で、新しいバージョンでは異なる場合があります。

関連する問題