Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jquery:如何将单击侦听器与提交事件函数结合起来?_Javascript_Php_Jquery - Fatal编程技术网

Javascript Jquery:如何将单击侦听器与提交事件函数结合起来?

Javascript Jquery:如何将单击侦听器与提交事件函数结合起来?,javascript,php,jquery,Javascript,Php,Jquery,我试图从表单输入中获取一个动态生成的ID,然后等待用户提交它,并且仅当ID包含字符串“comment”时才处理提交。目前,我可以获得ID,但是提交默认操作没有被阻止,并且会发生常规的POST操作,而不是ajax。 经过几天的努力,我觉得自己失败了。。。任何帮助都将不胜感激 $(document).ready(function() { var fullID; $(".post-new-comment-input").click(function(){ fullID = $(this).a

我试图从表单输入中获取一个动态生成的ID,然后等待用户提交它,并且仅当ID包含字符串“comment”时才处理提交。目前,我可以获得ID,但是提交默认操作没有被阻止,并且会发生常规的POST操作,而不是ajax。 经过几天的努力,我觉得自己失败了。。。任何帮助都将不胜感激

$(document).ready(function() {
var fullID;

$(".post-new-comment-input").click(function(){
    fullID = $(this).attr('id');
});

$(this).submit(function(e)
{
    if(fullID.indexOf("comment") > -1) <?php // execute only if the fullID contains "comment" ?>
    {
        e.preventDefault();

        var value   = $('#'+fullID).val();
        var justID  = fullID.substring(8); <?php // truncate first 8 chars, the 'comment-') ?>

        $.ajax({
            type: "POST",
            url: "actions",
            data: { 'comment-pid': justID, 'comment-uid': <?php echo get_current_user_id(); ?>, comment: value },
            dataType: 'json',
            success : function(response)
            {
                $('#post-discussion-'+justID).html(response[0]);
                $('#comments-count-'+justID).html(response[1]);
            }
        });
        $('#'+fullID).val(null); <?php // clear the input field after returning post result ?>  
    }
});
});
$(文档).ready(函数(){
var fullID;
$(“.post new comment input”)。单击(函数(){
fullID=$(this.attr('id');
});
$(此).submit(函数(e)
{
如果(完整ID.indexOf(“注释”)>-1)
{
e、 预防默认值();
var值=$('#'+fullID).val();
var justID=fullID.substring(8);,注释:value},
数据类型:“json”,
成功:功能(响应)
{
$('#post discussion-'+justID).html(回复[0]);
$('#评论计数-'+justID).html(响应[1]);
}
});
$('#'+fullID).val(null);
}
});
});
以下是表格:

    <div class="comment-form">
        <form>
                <input type="text" id="comment-<?php echo $post_id; ?>" class="post-new-comment-input" placeholder="Write your comment...">
                <input type="submit" class="hide"> 
            </form>
    </div>


如果我是您,我会将事件附加到表单元素的提交事件

为了防止出现默认事件,应该从函数中返回false。也可以执行event.preventDefault()


但在提交事件中这样做才是正确的方法。我想!:)

我不确定我是否明白你在这里做什么。从代码的设置方式来看,当用户单击“注释”字段时,似乎您正在触发要提交的注释。我假设这不是期望的行为,当用户按下评论文本区域字段中的enter键时,您更可能希望触发提交(如在Facebook上),在这种情况下,您希望使用“keyup”事件处理程序。然后,提交功能将检查是否按下了enter键,否则将不执行任何操作

$(".post-new-comment-input").on("keyup", function (event) {
    if (e.keyCode == 13) {
        [YOUR AJAX POST CODE HERE]
    } else return false;
});

话虽如此,我不确定用户看到没有提交按钮的表单时有多直观(对于不懂技术的人来说…),如果您确实希望包含提交按钮并使其以任何方式工作,您可以将代码放入单独的提交事件处理程序中,然后在用户按下文本区域中的enter键时触发提交事件。

您可以发布标记吗?提示:不要在其他处理程序中附加处理程序。将逻辑移到提交处理程序。是否使用
标记现在已附加。是的,我在用,但我试过,有没有,没有区别。我确信有一种方法可以在不使用.click的情况下使用.submit事件,但我也无法让它以这种方式工作…你能给我举个例子吗?@mifi79,没错。我只希望它获取ID,并且仅当ID包含字符串“comment”时才处理其余内容。我尝试过将.click()事件与.submit()分开,它可以工作,但由于某种原因,它会阻止所有其他提交表单在提交此表单后工作…如果这有意义的话?如果有一种方法仅使用.submit()就可以做到这一点,那将是理想的。我对js还是一个新手,而且已经走到了死胡同。谢谢@mifi79,但这对我来说似乎不起作用。我已经更新了代码,试图让我的意图更清楚。使用更新后的代码,它可以正常工作,但在提交表单一次后,它会破坏所有其他表单,并尝试使用ajax,即使它们的ID中不包含“注释”。Hmmm。。。你有我能看到的网页链接吗?您的其他表单输入是否使用相同的类?