1

我有一个用户列表,每个用户下面都有一个小表单,管理员可以在其中添加自己的评论。像这样:

<form name="update_comment_99" method="post" action="">
    <td colspan="4">
        <input type="text" name="sortering" id="sortering" placeholder="job" value="">
    </td>
    <td colspan="3">
        <textarea name="comment" id="comment" placeholder="Comment"></textarea>
    </td>
    <td>
        <input type="hidden" value="99" name="uid" id="uid">
        <a name="comment_button" id="comment_button" class="btn btn-primary pull-right  comment-button">Update 
            <li class="icon-circle-arrow-up icon-white"></i>
        </a>
</form>
    </td>

然后我有一个与按钮一起使用的事件处理程序:

$('#cvDatabase').on('click', '.comment-button', function() {
    var uid = $('input[name=uid]');
    var comment = $('textarea[name=comment]');
    var sortering = $('input[name=sortering]');
    var dataString = 'uid='+uid.val()+'&comment='+comment.val()+'&sortering='+sortering.val();
    alert(dataString);

我遇到的问题是 jQuery 没有获取表单元素的用户输入,只有当它们预先填充了“value =”时。

我已经做了无数次没有问题,但由于某种原因,这根本不起作用!

4

6 回答 6

2

你需要这样做:

var $tr = $(this).closest('tr');
var uid = $tr.find('input[name=uid]');
var comment = $tr.find('textarea[name=comment]');
var sortering = $tr.find('input[name=sortering]');

var dataString = 'uid=' + uid.val() + '&comment=' + comment.val() + '&sortering=' + sortering.val();
alert(dataString);

Using为您提供第一个输入的对象,而不是您当前单击的按钮$('input[name=uid]')附近的元素。comment

于 2013-04-29T12:23:55.157 回答
1

试试这样http://jsfiddle.net/Lwh4C/1/

 $(document).on('click', '.comment-button',function(){
            var uid = $('input[name=uid]');
            var comment = $('textarea[name=comment]');
            var sortering = $('input[name=sortering]');
            var dataString = 'uid='+uid.val()+'&comment='+comment.val()+'&sortering='+sortering.val();
            alert(dataString);
    });
于 2013-04-29T12:23:05.833 回答
0

让我们用一般的方式来做吧,如果需要的话,不用担心新添加的输入元素,它会dataString用仍然非常非常强大的 javascript + jQuery 生成你的。

<form name="update_comment_99" method="post" action="">
    <td colspan="4">
        <input type="text" name="sortering" id="sortering" placeholder="Type of job" value="" />
    </td>
    <td colspan="3">
        <textarea name="comment" id="comment" placeholder="Comment"></textarea>
    </td>
    <td>
        <input type="hidden" value="99" name="uid" id="uid"/>
        <a id="comment_button" href="#">Update <i class="icon-circle-arrow-up icon-white"></i></a>
    </td>
</form>
<script>
$("#comment_button").on('click', function(){
    var dataString=$('form[name=update_comment_99]').find('input,textarea').map(
        function(){return this.name+"="+this.value;}
    ).splice(0).join('&');
    alert(dataString);
    //for multiple selects this may not work so simple, but thats not your question
});
</script>

用叉子摆弄http://jsfiddle.net/36aS9/

于 2013-04-29T13:23:22.707 回答
0

请参见

http://jsfiddle.net/2dJAN/5/

$('#comment_button').on('click', function() {
        var uid = $('input[type=hidden]').attr('id');
        var comment = $('textarea[name=comment]').val();
        var sortering = $('input[name=sortering]').val();
        var dataString='uid='+uid+'&comment='+comment+'&sortering='+sortering
        alert(dataString);
});
于 2013-04-29T12:25:40.767 回答
0

尝试这个

$('.comment-button').live('click',function() {
        var uid = $('#uid');
        var comment = $('#comment');
        var sortering = $('#sortering');
        var dataString = 'uid='+uid.val()+' &comment='+comment.val()+' &sortering='+sortering.val();
        alert(dataString);
});
于 2013-04-29T12:26:57.033 回答
0

jsfiddle为此

 $("#comment_button").click(function() {
   var uid = $("#uid").val()
    var comment = $("#comment").val()
    var sortering = $("#sortering").val()
    var dataString = 'uid='+uid+'&sortering='+sortering+'&comment='+comment;
    alert(dataString);
 });
于 2013-04-29T12:27:36.867 回答