javascript - 将跨度转换为输入

标签 javascript jquery jsp web-applications

我正在开发网络应用程序,我有这样的要求,每当用户点击 span 内的 text 我需要将其convert输入字段模糊我需要将其转换回以再次跨越。所以我在我的一个 jsp 页面中使用了以下脚本。

Java 脚本:

<script type="text/javascript">
function covertSpan(id){

    $('#'+id).click(function() {
        var input = $("<input>", { val: $(this).text(),
                                   type: "text" });
        $(this).replaceWith(input);
        input.select();   
    }); 

      $('input').live('blur', function () {
            var span=$("<span>", {text:$(this).val()});
            $(this).replaceWith(span);

      });         
}

JSP 代码:

<span id="loadNumId" onmouseover="javascript:covertSpan(this.id);">5566</span>

现在我的问题是,只有第一次一切正常。我的意思是,每当我点击 span 内的文本 first time 时,它都会转换为输入字段,然后再次 onblur 它会从输入字段转换回普通文本。但是,如果再次尝试这样做,它将不起作用。上面的脚本有什么问题?

最佳答案

最好将您的 dom 结构更改为这样的结构(请注意,span 和输入并排并位于共享父 .inputSwitch

<div class="inputSwitch">
First Name: <span>John</span><input />
</div>
<div class="inputSwitch">
Last Name: <span>Doe</span><input />
</div>

然后我们可以像这样做我们的 JS,它将支持选择所有焦点和跳转到下一个/上一个跨度/输入:http://jsfiddle.net/x33gz6z9/

var $inputSwitches = $(".inputSwitch"),
  $inputs = $inputSwitches.find("input"),
  $spans = $inputSwitches.find("span");
$spans.on("click", function() {
  var $this = $(this);
  $this.hide().siblings("input").show().focus().select();
}).each( function() {
  var $this = $(this);
  $this.text($this.siblings("input").val());
});
$inputs.on("blur", function() {
  var $this = $(this);
  $this.hide().siblings("span").text($this.val()).show();
}).on('keydown', function(e) {
  if (e.which == 9) {
    e.preventDefault();
    if (e.shiftKey) {
      $(this).blur().parent().prevAll($inputSwitches).first().find($spans).click();
    } else {
      $(this).blur().parent().nextAll($inputSwitches).first().find($spans).click();
    }
  }
}).hide();

关于javascript - 将跨度转换为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16374057/

相关文章:

javascript - 表单通过 ajax POST 提交两次

java - 如何在使用 JSP 和 Java 时以 HTML 格式获取本地文件

javascript - jsp onclick不调用javascript函数

javascript - Modal Body 内容 float 到 Modal footer 区域并占据 footer

jquery - 如何在asp.net中将文本附加到Div表单jQuery?

java - 如何从 mysql 数据库检索图像并将其显示在 HTML 中的 <td> 和 <img> 标记内?

javascript - 使用indexOf()在变量中搜索多个值的有效方法?

javascript - 正则表达式忽略命名模式

javascript - 如何在javascript中通过另一个变量来增加一个变量

javascript - 如何在第一次单击时运行一个 jquery 函数,在第二次单击时运行另一个函数