我需要使用 CSS 和 jQuery 在不更改其位置或 tds 宽度的情况下使输入字段溢出 td

Posted

技术标签:

【中文标题】我需要使用 CSS 和 jQuery 在不更改其位置或 tds 宽度的情况下使输入字段溢出 td【英文标题】:I need to make an input field overflow a td without changing its position or the tds width using CSS and jQuery 【发布时间】:2015-02-16 06:13:03 【问题描述】:

我需要在焦点集中时放大输入字段,而包含的 td 也不会放大。

两个字段的进一步应该保持在它们的实际位置(看看小提琴,它会移动)而不是向上或向下移动(由绝对位置引起的)。

这是我的真实状态

    $('.Bemerkung').focus(function() 
    $(this).attr('size','30');
    $(this).parent().css('position':'absolute');
    $(this).css('position':'absolute');
)
$('.Bemerkung').blur(function() 
    $(this).attr('size','5');
    $(this).removeAttr('style');
    $(this).parent().removeAttr('style');
)

http://jsfiddle.net/kazuya88/dhy0dxyy/

希望你能帮助我。

【问题讨论】:

在 Chrome 中似乎没有移动到我。 我正在使用 Chrome,文本框在焦点上离开了表格。您是否试图使文本框更宽,而不是更改列的宽度? 我更新了小提琴 - 如果你有一排有 2 行的输入,则可以更清楚地看到。 【参考方案1】:

和你原来的相差不远:

$('.Bemerkung').focus(function() 
    oldWidth = $(this).width();
    $(this).attr('size','30');
    $(this).css('position':'relative');
    $(this).css('margin-right':('-'+($(this).width()-oldWidth)+'px'));
)
$('.Bemerkung').blur(function() 
    $(this).attr('size','5');
    $(this).removeAttr('style');
    $(this).parent().removeAttr('style');
)

更新:我想我应该添加更多关于这里发生的事情的解释。这基本上在获得焦点之前检测大小,然后增加大小并将右边距设置为新大小和旧大小之间的差异(从而使渲染器将其视为与获得焦点之前相同的“宽度”)。 position:relative 是为了让元素宽度不影响td宽度(只要right-margin设置为负)。

【讨论】:

请注意,这可以让您保持居中对齐。仅供参考,这是您的旧代码和上面代码的差异:filediff.net/d/O2oS07sIqU【参考方案2】:

您可以使用transform: scale(1.2) 将其放大,添加transition 并删除absolute 位置声明。

$('.Bemerkung').focus(function() 
  $(this).css(
    'transition': 'transform 0.5s',
    'transform': 'scale(1.2)'
  );
);
$('.Bemerkung').blur(function() 
  $(this).css(
    'transform': 'scale(1)'
  );
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="weektimereg" class="recordlist" border=1 style="text-align:center;">
  <tr>
    <th style="width:110px;">sample</th>
    <th style="width:110px;">sample2</th>
  </tr>
  <tr>
    <td>
      <input type=text size=3 name=abc value='03:00'></input>
      <input class='Bemerkung' type=text size=5 name=cde value='test'></input>
    </td>
    <td>
      <input type=text size=3 name=abc value='03:00'></input>
      <input class='Bemerkung' type=text size=5 name=cde value='test'></input>
    </td>
  </tr>
  <tr>
    <td>
      <input type=text size=3 name=abc value='03:00'></input>
      <input class='Bemerkung' type=text size=5 name=cde value='test'></input>
    </td>
    <td>
      <input type=text size=3 name=abc value='03:00'></input>
      <input class='Bemerkung' type=text size=5 name=cde value='test'></input>
    </td>
  </tr>
</table>

【讨论】:

【参考方案3】:

尝试用严格的 CSS 替换 javascript

我做的一件事是让 td 单元格文本对齐:左。这是目前唯一真正的区别。切换到绝对位置时出现移动的原因是因为它试图将元素对齐到中心,但是绝对元素没有被测量或居中。

这是 CSS。

table td
position: relative;
overflow: visible;
text-align: left;


.Bemerkung:focus
    width: 196px;
    position: absolute;
    z-index: 10000;

如果您需要 text-align: center 请告诉我,我会寻找不同的解决方案。

【讨论】:

以上是关于我需要使用 CSS 和 jQuery 在不更改其位置或 tds 宽度的情况下使输入字段溢出 td的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:更改加载了 ajax 的元素上的 CSS?

如何在不刷新网页的情况下使用 ajax 和 jquery 动态更改 Datatables 的多个列标题?

为啥读取 localStorage 值需要刷新页面才能显示由 jQuery 切换的 CSS 更改?

使用 PHP 和 jQuery 更改 CSS 样式

Jquery在不使用值的情况下选择更改

使用 Javascript/jQuery 和 CSS 更改 PNG 颜色