使用jquery自动滚动到可滚动的pop div的顶部

时间:2015-02-02 08:02:08

标签: javascript jquery html css ajax

首先,我有一个弹出式div,其中包含一个表单

这是我的div

<div class="addnewrule" id="add_message_0">
       <form method="post" action="" id="frmadd">
        <input type="hidden" name="filter" value="1">
        <input name="rule_id" type="hidden" value="0">
      <table class="table-responsive" width="100%" border="0" cellspacing="0" cellpadding="10" id="" style="text-align:center; margin-top:0px;">
      <tr>
        <td colspan="2" align="left"><div id="display_msg_0"></div></td>
      </tr>
      <tr>
        <td width="40%" align="left">Name:</td>
        <td width="60%" align="left"><input class="input_field" name="rule_name" type="text"></td>
      </tr>
      <tr>
        <td align="left">Type:</td>
        <td align="center">
        <input type="radio" name="rule_type" value="0" style="display:none;"   />
        <input type="radio" name="rule_type" value="1" checked="checked" style="display:none;"  />
        <div class="btn-group equal_btn">
            <button id="block_click" class="btn btn-default" type="button" onclick="setRules(0);">Block Clicks</button>
            <button id="filter_click" class="btn btn-default active" type="button" onclick="setRules(1);">Filter Clicks</button>
          </div></td>
      </tr>
      <tr>
        <td align="left">Rule Active:</td>
        <td align="center">
        <input type="radio" id="active_0" name="active" value="1" checked="checked" style="display:none;"  />
        <input type="radio" id="inactive_0" name="active" value="0" style="display:none;" />
        <div class="btn-group">
            <button type="button" id="status_enb_0" class="btn btn-default active_btn active" onclick="setruleStatus(0,1);">Enable</button>
            <button type="button" id="status_dis_0" class="btn btn-default inactive_btn" onclick="setruleStatus(0,0);">Disable</button>
          </div></td>
      </tr>
      <tr>
        <td align="left">Campaign ID:</td>
        <td align="left"><input class="input_field" name="camp_id" type="text" /></td>
      </tr>
      <tr>
        <td align="left" id="rRange">Filter IP Ranges:</td>
        <td align="left"><table width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td style="padding:0;" width="45%"><input class="input_field" name="start_ip" type="text" /></td>
              <td width="10%" align="center">To</td>
              <td style="padding:0;" width="45%" align="right"><input class="input_field" name="end_ip" type="text" /></td>
            </tr>
          </table></td>
      </tr>
      <tr>
        <td align="left" id="rUAs">Filter users agents that contains:</td>
        <td align="left"><input class="input_field" name="user_agent" type="text" /></td>
      </tr>
      <tr>
        <td align="left" id="rRefs">Filter referers that contains:</td>
        <td align="left"><input class="input_field" name="referer" type="text" /></td>
      </tr>
      <tr id="rUrl" style="display:none;">
        <td align="left">Send Blocked Clicks to:</td>
        <td align="left"><input class="input_field" type="text" id="rule_url" name="rule_url" value="" /></td>
      </tr>
      <tr>
        <td align="left" colspan="2"><table class="copypaste" width="100%" border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td><a href="javascript:void(0)" class="btn blue_button tab2" onclick="submitRule('frmadd',0);">Apply</a> <a href="javascript:void(0)" class="btn orange_button tab2" onclick="cancel_popup('add_new_rule')" >Cancel</a></td>
            </tr>
          </table></td>
      </tr>
    </table>
    </form>
    </div>

现在,这是下面给出的jquery ajax函数。它检查验证并在消息div中显示验证消息...

function submitRule(frmId,rule_id)
{
    var data=$('#'+frmId).serializeArray();
    $.ajax({
        type:'POST',
        url:'ajax/rule_update_process.php',
        data: data,
        dataType:'json',
        success:function(jData)
        {
            if(jData.status==1)
            {
                $("#display_msg_"+rule_id).html(jData.error);
                $("#display_msg_"+rule_id).addClass('error');
                var child_div = $("#display_msg_"+rule_id);
                var parent_div = $("#add_message_"+rule_id);
                parent_div.scrollTop(parent_div.scrollTop() + child_div.position().top);
            }
            else
            {
            window.location.href='settings_rules.php';
            }
        }
      });
}

由于弹出窗口是一个可滚动的div,我想滚动(仅在弹出窗口内)到顶部,以便我可以显示带有错误消息的消息div ..

这是我如何获得屏幕,。

enter image description here

enter image description here

如果代码滚动到弹出式div的顶部以显示错误消息div,我使用了这个部分,

但这段代码似乎不起作用..

我做错了什么?

$("#display_msg_"+rule_id).html(jData.error);
$("#display_msg_"+rule_id).addClass('error');
var child_div = $("#display_msg_"+rule_id);
var parent_div = $("#add_message_"+rule_id);
parent_div.scrollTop(parent_div.scrollTop() + child_div.position().top);

3 个答案:

答案 0 :(得分:0)

用这个代替最后一行代码 的 parent_div.scrollTop(0,0);

答案 1 :(得分:0)

我会建议一个非常简单的方法:

$("#apply_button").click(function () { 
  var error_message = $("#your_error_message").css("display");

  if (error_message != "none") {
    $("#add_message_0").scrollTop(0);
  }; 
});

代码不言而喻。

BR

答案 2 :(得分:0)

你可以使用css only brother。例如,这是你的表格。

<div>
<form class="has-error">
<p>error</p>
<input name="" value="">
</form>
<div>

您可以使用 .has-error 类设置css代码。只有在显示错误消息时才会使用您的css代码。

div{ overflow-y: scroll; }
div .has-error{ height: 400px; }

高度将使用错误消息来保护您当前的区域高度。

fiddle demo

上有类似的内容

如果在按钮单击时看不到该消息,请将其添加到您的点击功能代码

$( '#add_message_1' ).delay( 200 ).animate({scrollTop: 0 }, 300);}