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

运行时的 Jquery UI 会删除所有文档对象并将其放在 DOM 之外,此时您将无法访问任何对象。这是所有 Jquery UI 插件的默认行为。所以你必须通过改变你使用它的方式来承受一些。

而且也没有办法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

我这样做而不是使用任意超时。我有每 250 毫秒轮询一次元素是否存在的功能。

// 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 回答