次のようなオートコンプリートボックスがたくさんあるテーブルがあります...
<richui:autoComplete style="width:500px" name="objSelect[${newRow-1}].id" value= "" action="${createLinkTo('dir': 'object/searchAJAX')}" forceSelection = "true" maxResultsDisplayed="20" minQueryLength ="3" onItemSelect="updateHiddenInput(id,${newRow-1})" />
updateHiddenInput
ユーザーが選択したIDとオートコンプリートがオンになっている行を渡す値を選択したときに呼び出される関数を呼び出す必要があります(この関数は、渡された値を使用して、同じ行の非表示フィールドを更新しますID)。関数は次のようになります: -
function updateHiddenInput(id, num){
var objID = "objectID[" + num + "].id";
$(document.getElementById(objID)).val(id);
}
テーブル内に新しい行を追加するまですべてが機能します。これにより、すべてが 1 行下に移動し、オートコンプリートが正しい行の非表示フィールドを更新しなくなります (まだ古い行を参照しているため)。
現在、新しい行が挿入されたときにすべてのフィールドを通過して名前を変更する別のコードがありますが、正しい行番号を通過するようにオートコンプリートを更新する方法がわかりません。
私が考えることができる他の唯一の代替手段は、オブジェクト自体と、オブジェクトに基づいて非表示を見つけることができる ID を渡すことですが、これを行う方法がわかりません。:S
に変更
onItemSelect="updateHiddenInput(id,${newRow-1})"
し
てみましたonItemSelect="updateHiddenInput(id,this)"
理論的には、オートコンプリート オブジェクトを通過し、そこからページをトラバースして、更新する非表示フィールドを見つけることができます。ただし、関数でそのオブジェクトを使用しようとすると、たとえば次のようになります。
var mynumber = $(myobject).closest('td').find('input').val();
値を警告しようとすると、常に「未定義」が返されます...
関数に を入れるだけalert(myobject)
で返されますAutoComplete instance0 autoLook[0].id
が、新しい行を挿入した場合、id 値は変更されません (つまり、オブジェクト id は現在 autoLook[3].id ですが、[0] と表示されていると思います)。問題の一部である可能性がありますが、この値を更新する方法がわかりました...
HTML の firebug を見ると、オートコンプリートにリンクされた /script があることに気付きました。これは、新しい行が追加されたときに更新されず、古い/元の ID 値への複数の参照が表示されるため、問題になる可能性があります (以下) のthis
通過は、現在のオブジェクトの値を通過していない可能性があります...?
<script type="text/javascript">
var autoCompleteDataSource = new YAHOO.util.XHRDataSource("/Framework/object/searchAJAX");
autoCompleteDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_XML;
autoCompleteDataSource.responseSchema = {
resultNode : "result",
fields : [
{ key: "name" },
{ key: "id" }
]
};
;
autoComplete = new YAHOO.widget.AutoComplete('autoLook[0].id','ad186a42e45d14d5cde8281514f877e42', autoCompleteDataSource);
autoComplete.queryDelay = 0;
autoComplete.prehighlightClassName = 'yui-ac-prehighlight';
autoComplete.useShadow = false;
autoComplete.minQueryLength = 3;
autoComplete.typeAhead = false;
autoComplete.forceSelection = true;
autoComplete.maxResultsDisplayed = 20;
autoComplete.shadow = false;
var itemSelectHandler = function(sType, args) {
var autoCompleteInstance = args[0];
var selectedItem = args[1];
var data = args[2];
var id = data[1];
updateHiddenInput(id,this) };
autoComplete.itemSelectEvent.subscribe(itemSelectHandler);
</script>
これまでのところ、user1690588 のすべての助けに感謝します! :)
さらに掘り下げると、私の問題はautoComplete = new YAHOO.widget.AutoComplete('autoLook[0].id','a5b57b386a2d1c283068b796834050186', autoCompleteDataSource);
具体的にはその入力部分の行にあると確信しています。autoLook[].id
これを変更できれば問題ありませんが、この行は自動生成され、更新方法がわかりませんそれは、誰でも同じような経験がありますか?