1

我有一个用于在表单中输入地址的文本字段以及包含设置自定义地址的文本的链接。如果用户开始输入地址,则在 ajax 的帮助下,存储在数据库中的地址将显示在下面。我的问题是当用户单击文本框右侧的链接(即设置自定义地址)时,我不想显示 ajax 事件。我需要知道,如果文本框的 id 可以更改单击链接,或者是否可以在旧文本框上方生成另一个文本框。我的代码是这样的:

function set_custom_address()
{
    var custom_venue_link = document.getElementById('custom_venue_link');
    if(custom_venue_link.innerHTML=="custom address")
    {
        document.getElementById('venue').style.display = "none";
        document.getElementById('venue_new').style.display = "block";
        document.getElementById('custom').value= "true";
        custom_venue_link.innerHTML = "tag venue";
    }
    else
    {
        document.getElementById('venue_new').style.display = "none";
        document.getElementById('venue').style.display = "block";
        document.getElementById('custom').value= "false";
        custom_venue_link.innerHTML = "custom address";
    }
}

我的html代码是这样的:

<input id="venue" name="venue" type="text"  
placeholder="Tag venue name" onkeyup="showData(this.value)" />
<input id="venue_new" name="venue_new" type="text" 
placeholder="Tag venue_name" style="display:none;"/> &nbsp; or 
<a   id="custom_venue_link" href="" 
onclick="set_custom_address();return false;">custom address</a></li> 
4

1 回答 1

2

您可以通过代码附加和分离事件处理程序,而不是添加另一个输入或更改其 ID。

当页面加载时,您应该附加事件:

document.getElementById("venue").onkeyup = function(){showData(this.value);};

然后在 set_custom_address 上,您可以将其分离:

document.getElementById("venue").onkeyup = null;

并在最后再次附加它,以防用户再次开始编辑输入值(或者您可以将其设为只读)。我看到你在隐藏它。


编辑:以下是使其只读的代码,以防万一:

document.getElementById("venue").setAttribute("readonly", "readonly");

你可以像这样删除它:

document.getElementById("venue").removeAttribute("readonly");

注 1:我不知道是否有任何东西导致 onkeyup 触发,但如果该字段是只读的,它不会从用户输入生成该事件。

注2:有人提到数据库中的地址显示在字段下,我不知道是否需要额外的步骤来隐藏它。也许需要一个函数“hideData()”。

于 2013-03-09T09:56:05.083 回答