JQuery изменить текст для ввода - PullRequest
3 голосов
/ 22 октября 2009

У меня есть таблица настройки, как показано ниже:

<table>
  <tr>
    <td class="url">
       <a href="http://www.domainname.com/page1.html" />
    </td>
  </tr>
  <tr>
    <td class="url">
       <a href="http://www.domainname.com/page2.html" />
    </td>
  </tr>
  <tr>
    <td class="url">
       <a href="http://www.domainname.com/page3.html" />
    </td>
  </tr>
</table>

Я хочу, чтобы при щелчке ссылки якорь сменился на текстовое поле, содержащее ссылку, ниже приведены примеры результатов:

<table>
  <tr>
    <td class="url">
       <input type="text" value="http://www.domainname.com/page1.html" />
    </td>
  </tr>
  <tr>
    <td class="url">
       <a href="http://www.domainname.com/page2.html" />
    </td>
  </tr>
  <tr>
    <td class="url">
       <a href="http://www.domainname.com/page3.html" />
    </td>
  </tr>
</table>

Когда щелкает другой тег привязки или текстовое поле не сфокусировано, любые текстовые поля снова становятся якорями, а выделенное поле становится текстовым полем.

Ответы [ 3 ]

13 голосов
/ 22 октября 2009

Это начало. Добавьте событие щелчка к ссылкам и событие размытия к входам, используя live().

$(function() {
  $("td.url a").live("click", function() {
    var parent = $(this).parent();
    $(this).replaceWith("<input type='text' value='" + $(this).attr("href") + "'>"); //closing angle bracket added
    parent.children(":text").focus();
    return false;
  });
  $("td.url :text").live("blur", function() {
    $(this).replaceWith("<a href='" + $(this).val() + "'>");
  });
});

При этом для такого рода вещей я предпочитаю не удалять элементы из DOM, как это. Вместо этого я предпочитаю просто скрывать / показывать элементы по мере необходимости. Например:

<table>
  <tr>
    <td class="url">
       <a href="http://www.domainname.com/page1.html" />
       <input type="text">
    </td>
  </tr>
</table>

с:

td.url input { display: none; }
td.edit a { display: none; }
td.edit input { display: block; }

и

$(function() {
  $("td.url a").click(function() {
    var a = $(this);
    a.next().val(a.attr("href")).focus();
    a.parent().addClass("edit");
    return false;
  });
  $("td.url :text").blur(function() {
    var txt = $(this);
    txt.prev().attr("href", txt.val());
    txt.parent().removeClass("edit");
  });
});
2 голосов
/ 22 октября 2009
$(".url").click(function()
{
var link = $(this).find("a");
link.hide();
$(this).append("<input id'txtUrl' value" + link.attr("href") + " />");
});
0 голосов
/ 22 октября 2009

Что-то вроде:

$("td.url a").bind("click", function(){
    var clickevent = arguments.callee;
    $("td.url input").trigger("blur");
    $(this).replaceWith("<input type='text' value='"+$(this).attr("href")+"'/>");
    $("td.url input").bind("blur", function(){
        $(this).replaceWith("<a href='"+$(this).val()+"' />");
        $("td.url a").bind("click", clickevent);
    });
});

полностью не проверено, конечно же

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...