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 に答える