リンク共有プレビューのような Facebook を構築しようとしています。視覚的に傾いている人には、次のようなものがあります。
すべてが正常に機能していますが、いくつかの小さな問題があります。リンク共有のプレビューは、対応する textarea の keyup 関数でトリガーされます。このようなもの:
$('#txtPublish').keyup(function(e){
if ($(this).val() != '' && $(this).parent().find('.share-with').hasClass('active')) {
detectHyperlink(e,this);
}
else {
//do whatever
}
});
対応する detectHyperlink は次のように始まります。
function detectHyperlink(e,textarea)
{
if((e.which == 13 || e.which == 32 || e.which == 17) && ($(textarea).val().trim() != "")){
var hyperlink_post = $('#txtPublish').val(); // make dynamic
if(hyperlink_post != null) {
hyperlink_post = " " + hyperlink_post;
var urlRegex = /(https?\:\/\/|\s)[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})(\/+[a-z0-9_.\:\;-]*)*(\?[\&\%\|\+a-z0-9_=,\.\:\;-]*)?([\&\%\|\+&a-z0-9_=,\:\;\.-]*)([\!\#\/\&\%\|\+a-z0-9_=,\:\;\.-]*)}*/i;
if(urlRegex.test(hyperlink_post)){
// SImple DOM Manipulation
$.ajax({
type: "post",
url: '/controller/crawlHyperlink',
data: {message: hyperlink_post},
cache: false,
success: function(data) {
// これらのことに興味がある人のために、もちろんデータは JSON 形式です。
これは問題なく動作しますが、問題は次のとおりです。detectHyperlink メソッドが何度も呼び出され続けます。つまり、Textarea がハイパーリンクを検出して情報を共有した後も、ループし続け、サーバーに対して ajax 呼び出しを行います。そのため、[投稿] ボタンを押すと、実際にこの情報を投稿する前に、ハイパーリンクを検出するためにサーバーに対して数回の呼び出しが行われます。
理由がわかりますか?
ありがとう