keyupイベントでトリガーされたdivに結果のリストを返すjavascriptライブラリがあります。 Jqueryを使用して、特定のクラスを持つすべてのページのすべてのフィールドに標準のkeyupイベントを適用したいとします。 私はそれを行うことができ、それは正常に動作します。 私の問題は、私が使用するパラメータは動的で、最後の2つはオプションの機能です。Javascript - 関数を文字列として渡してから実行する
<input type="text"
class="font8_input" name="wsFromPart"
value="<%=wsFromPart%>" id="wsFromPart"
size="20" maxlength="20"
onfocus="javascript:fncAjaxClear()"
onkeyup="javascript:fncAjaxSearch('wsDatabase','..\\AjaxBrowses\\PartBrowse.asp','wsFromPart','wsFromPartList','fncPrePartAjax',null);"/>
現在、私が機能を持たない場合、これを制御するために、私はnullを渡します。
私はこのようなフィールドをすべて定義できる位置に到達しようとしています。
<input type="text" class="PartClass" name="wsFromPart" value="<%=wsFromPart%>" id="wsFromPart" />
他のものは、Jqueryによってクラス/イベントを設定することで追加されます。
私のページに関数が存在するかどうかをテストする方法を試しています。私は文字列として関数名を渡そうとしましたが、その作業を行うことはできません。私の最後の試みは、ジェネリック関数を持って、この関数に存在する可能性のある関数の名前を評価し、関数であればそれを実行することです。
<input type="text" class="font8_input" name="wsFrPt" id="wsFrPt" size="20" maxlength="20" value="<%=wsFrPt%>" onfocus="javascript:fncAjaxClear()" onkeyup="javascript:fncAjaxSearch('wsDatabase','..\\AjaxBrowses\\PartBrowse.asp','wsFrPt','wsFrPtList',fncCheckFunction('fncPreAjaxPart1'),'fncPostAjaxPart');"/>
function fncAjaxSearch(wsDb,wsAsp,wsId,wsTarget,wsPreFunction,wsReturnFunction) {
var myDate = new Date();
var myDate1 = myDate.getTime();
if (objXHR.readyState == 4 || objXHR.readyState == 0) {
var wsDatabase = escape(document.getElementById(wsDb).value);
var wsStr = escape(document.getElementById(wsId).value);
var wsParam = "";
if (wsPreFunction !== null) {
wsParam = wsPreFunction();
}
//Only do ajax call if the 'source' field is not empty, otherwise empty target and clear border.
if (document.getElementById(wsId).value > '') {
objXHR.open("GET", wsAsp + '?qryDatabase=' + wsDatabase + '&qryDummy=' + myDate1 + '&qrySearch=' + wsStr + wsParam, true);
objXHR.onreadystatechange = function(){if(objXHR.readyState==4){fncAjaxSearchReturn(objXHR,wsId,wsTarget,wsReturnFunction)}};
objXHR.send(null);
}
else {
document.getElementById(wsTarget).innerHTML = '';
document.getElementById(wsTarget).style.borderWidth = '0px';
}
}
}
ありがとうございました。私は最初のソリューションを使用し、それを動作させるために使用しました。私はしなければならなかった:var wsFnc = window [wsPreFunction]; if(wsFnc && typeof wsFnc === "function"){//それが存在し、関数であることを確認するwsParam = wsFnc(wsId); }(これを「コード」としてどのように記述するかはわかりません)。ごめんなさい。 – Keith
これを関数にラップして、引数を渡すことはできますか? fx execute(function、arg1、arg2、arg3)? –
'function test(){ var args = Array.prototype.slice.call(arguments)、 fnc = window [args.shift()]; fnc.apply(this、args); } test( "alert"、 "Hello"); ' – epascarello