1

私は次の問題を抱えています...

私のアプリケーションでは、php、smarty テンプレート、および jQuery を使用しています。

smarty テンプレート内には、POST メソッドでフォームが定義されています。フォームのアクション パラメータは次のように定義されます。

action={if isset($search_place)} {link->somePhpFunction($search_place) {/if}

... POSTED パラメータに応じてアクションを変更する必要があるためです。

「search_place」という名前の入力 (テキスト) は、フォーム内で定義されます。

クライアント側でいくつかのアクション (値のチェック、オートコンプリートなど) を実行する必要があるため、送信ボタンは jQuery 関数にリンクされています。

ボタンがクリック
されたとき、私はする必要があります

ボタンがクリックされると、jQuery ハンドラーが呼び出され、いくつかのチェック/修正が実行され、フォームを含むページが表示されます。

問題は、アクション パラメータをフォームから定義する前に、search_place 変数が不明であり、php 関数がまったく呼び出されないことです。また、ボタン ハンドラーに Cookie を設定し、フォーム アクションを {$smarty.cookies.search_place} 値に設定しようとしましたが、問題は別の問題に変わりました。フォームは常に前のボタン クリックのアクションを実行するため、正しい結果を得るには、ボタンを 2 回クリックする必要があります。

また、php 関数がデータベース内の大きなテーブルから正しいものを選択するため、必要なアクション パラメータを jQuery イベント ハンドラに転送する方法がないことにも言及する必要があります。これが可能であれば、アクション パラメータを jQuery 関数から簡単に変更できます...

私が知っている唯一の方法は、AJAX を使用して正しいパラメーターを取得し、ボタン イベント ハンドラーから正しいアクション パラメーターを割り当てることですが、サイト訪問者の多くがブラウザーの javascipt を有効にしていないため、これは適切な解決策ではありません。

解決策は、jQueryイベントハンドラーからボタンを(プログラムで)もう1回クリックすることもできますが、その方法がわかりません...

この問題を解決するための助けやアイデアは大歓迎です...

前もって感謝します。混雑する

4

1 に答える 1

0

次のことを試してください。

<form onsubmit="return validationFunction()">

この関数がデータを検証し、正しい場合は true を返し、そうでない場合は false を返します。

今はjsです。のようなものを呼び出さないでください

$("#someForm").submit();

代わりに次を使用します。

if(validationFunction()){
   $("#someForm").submit();
}

アップデート

最後に、validationFunction がサーバー側の作業を行う場合

次に、代わりに次のような変数

var formSubmitted = false;

次に、onSubmit は false を返します。formSubmitted を true に設定し、ajax 呼び出しを実行します。ajax 呼び出しが完了したら、formSubmitted が true の場合はチェックし、そうでない場合はフォームを送信してからエラーを表示します...

于 2013-02-27T01:13:14.520 に答える