无法在jquery UI对话框中设置输入字段的值

时间:2012-09-12 15:24:42

标签: jquery forms jquery-ui-dialog

我正在尝试使用jquery更改输入字段的值。输入字段位于UI对话框中。这是我的形式的一部分

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

我有一个链接调用显示对话框的函数,我希望它也可以更改此输入的值。

function editFormulaCategoryDialog() {

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

为什么它不起作用?

如果我将输入代码放在页面外部对话框的其他位置并单击相同的链接,则会显示对话框,并且对话框外的输入字段的值会按预期更改。

4 个答案:

答案 0 :(得分:4)

试试这个:

function editFormulaCategoryDialog() {

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

在对话框 create 后尝试回调。您还可以使用 open 事件回调。

答案 1 :(得分:3)

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

而且没有办法让dialog单独留下你的元素,因为无法正确显示对话框。如果要在对话框中使用显示部分表单的模式,则必须使用dialog回调方法动态填充表单中的隐藏字段或类似内容。

答案 2 :(得分: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);
}

答案 3 :(得分: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");

这似乎可以解决问题