2

jqueryで入力フィールドの値を変更しようとしています。入力フィールドはUIダイアログボックス内にあります。それは私のzendフォームの一部です

<input name="formulaCategory" id="formulaCategory" value="" size="40" type="text">

ダイアログを表示する関数のリンク呼び出しがあり、この入力の値も変更したいと思います。

function editFormulaCategoryDialog() {

    $("#edit-formula-category-dialog").dialog({show: "slide"});
    $("#formulaCategory").val('test');
}

なぜそれが機能しないのですか?

ダイアログボックスの外側のページの別の場所に入力コードを配置し、同じリンクをクリックすると、ダイアログボックスが表示され、ダイアログの外側の入力フィールドの値が期待どおりに変更されます。

4

4 に答える 4

4

これを試して:

function editFormulaCategoryDialog() {

    $("#edit-formula-category-dialog").dialog({
        show: "slide",
        create: function() {
            $("#formulaCategory").val('test');
        }
    });
}

ダイアログボックスの作成後にコールバックを試してください。オープンイベントコールバックを使用することもできます。

于 2012-09-12T15:30:26.633 に答える
3

実行時にJqueryUIはすべてのドキュメントオブジェクトを削除し、それをDOMの外に置きます。この時点では、どのオブジェクトにもアクセスできません。これが、すべてのJqueryUIプラグインのデフォルトの動作です。ですから、使い方を変えることで、なんとか耐えなければなりません。

またdialog、ダイアログを適切に表示することは不可能であるため、要素をそのままにしておく方法はありません。フォーム内の非表示フィールドに動的にデータを入力するには、コールバックメソッドを使用する必要がありdialogます。または、フォームの一部をダイアログに表示するこのパターンを使用する場合は、同様の方法を使用する必要があります。

于 2012-09-12T15:30:06.760 に答える
2

同様のソリューションが必要で、レイテンシが小さいsetTimeout関数を使用してみました。それは私のために働いた。

function myCreateDialogFn(){
    //.....create jQuery Dialog here;

    setTimeout(function () {
        $("#edit-formula-category-dialog").find('input').each(function () {
            if (this.name=="formulaCategory"){
                // your code here
            }
        }
    }, 200);
}
于 2014-01-12T17:49:30.653 に答える
0

任意のタイムアウトを使用する代わりに、この方法で実行します。250msごとに要素の存在をポーリングする機能があります。

// wait for element to exist before populating
function waitForElement(elementPath, callBack){
  window.setTimeout(function(){
    if($(elementPath).length){
      callBack(elementPath, $(elementPath));
    }else{
      waitForElement(elementPath, callBack);
    }
  },250)
}

それから私はそれをこのように呼びます

  waitForElement("#idOfDialog",function(){
            var ordered=$("#input1).val();
            var price=$("#input2").val();
            var vendor=$("#input3").val();
.... or set value
             $("#input4").val("test");

そしてそれは問題を解決するようです

于 2019-04-16T15:34:50.207 に答える