2014-03-02 21 views
0

以下一段Ajax代碼需要發送兩段數據,一段id(由data-id屬性生成)和tweet(由textarea的值)。當只有一個元素點擊頁面時,它可以很好地工作。Ajax:爲同一類的多個項目之一發送textarea的值

但是,我有列表頁面調用相同的代碼,在頁面上有幾個同一類的元素。這些頁面無法識別正在發送的「tweet」變量,並始終回退到默認值。如果我在下面的腳本中刪除默認代碼,則不會發送任何推文。

爲什麼以下工作與多個textareas與「tweet」類之一?有任何想法嗎?

$(document).on("click",".send-tweet-button", function() { 
var id = $(this).attr('data-id'); 
var userAPI = ' /api/tweetSideTaken.json'; 
    var tweet = $('textarea.tweet').val(); 
    if (tweet == '') { 
    tweet = "My default text"; 
} 
    var userInfo = $.ajax({ 
    type: "POST", 
    url: userAPI, 
    dataType: "json", 
    data: { 
     tweet: tweet, 
     tid: $(this).attr('data-id') 
    } 

    }).success(function(json) { 
    //success stuff 
    }; 
    if (error !='') { 
    /error stuff 
} 
    }); 
}); 
+1

請添加您的HTML。 –

回答

1

由於您查詢類選擇器,您需要迭代每個元素以獲取每個值。 下面會爲你

var tweet = ''; 
$('textarea.tweet').each(function(k,v){ 
    tweet += $(this).val(); 
}); 
if (tweet == '') { 
    tweet = "My default text"; 
} 
+0

完美地工作。謝謝@ code-jaff。 – dilettante

0

通常,當你從那些需要客戶輸入並將其張貼到服務器元素的數據,最好的做法是設置屬性「名」,以不同名稱的元素工作。例如

<textarea class="tweet" name="tweet.title"></textarea> 
<textarea class="tweet" name="tweet.content"></textarea> 

var data = {}; 
$('textarea.tweet').each(function() { 
    var $el = $(this); 
    data[$el.attr('name')] = $el.val(); 
}); 

如果一個頁面上的元素應用同一個類中,你恰巧這個類,$(選擇)查詢他們.VAL()只返回第一個元素的值。

相關問題