2010-02-05 87 views
0

我有一个jQuery对话框的问题和处理脚本的方式。输入val的jQuery对话框脚本

在对话框的html,我有

<input id="test"> 

如果我以后输入做

<script type="text/javascript> 
    $('#test').val("haha") 
</script> 

,它显示了。如果我在之前把它放在,它就不起作用。 现在的问题是我正在尝试使用点击触发器来更改$('#test')的值,而我不能!

$('.testbutton').click(function() { 
      alert();  
      $('#test').val("haha"); 
    }); 

警报工作,以及初始val替换工程,这意味着没有任何重复或缺少输入区域。

总脚本,因为它现在是,不工作:

<input type="button" class="testbutton" /> 
<input type="text" size="10" id="test" name="test" value=""> 

$('#test').val("currentvalue"); // This works 
     $('.testbutton').click(function() { 
       alert();  
       $('#test').val("haha"); 
     }); 

更新 对话框显示#TEST正确的值,一旦对话框关闭,然后重新打开。这可能是我错过的东西吗?

+0

你确定'val()'在这里吗? Afaik其''。尝试'attr(“value”)' – ZeissS 2010-02-05 15:49:29

+1

@ZeissS - 'val()'对输入正常工作 – 2010-02-05 15:50:10

+0

确实,'val()'是最好的。 'attr('value')'恰好适用于输入,因为它转换为HTMLInputElement节点上的JavaScript'.value'。它*不*访问HTML属性'value',这是一个完全不同的东西:属性'value'对应JavaScript属性'.defaultValue',而不是'.value'。 – bobince 2010-02-05 16:36:26

回答

0

该问题最终成为测试中的#号。出于某种原因,替换使用类标识符而不是id标识符。我想这是因为#将只替换一个实例,并且出于某种原因,我还没有发现,这个对话框有多个实例(或者一个隐藏实例)。

感谢您的所有建议!

2

把你的jQuery代码放入$(document).ready(function() {...your code...})。这会在浏览器为您的页面创建DOM树后执行。否则,javascript将无法正确搜索/操作DOM元素。它看起来如下:

$(document).ready(function() { 
    $('.testbutton').click(function() { 
      $('#test').val("haha"); 
    }); 
}); 

更新:

如果你的HTML代码动态加载,然后用live到事件处理程序绑定:

$(document).ready(function() { 
    $('.testbutton').live("click", function() { 
      $('#test').val("haha"); 
    }); 
}); 
+0

那么,如果它是一个对话框,它可能是通过AJAX加载的,并且它是一个HTML片段。如果是这种情况,那么将不会为该内容启动“准备好”事件。 – Pointy 2010-02-05 15:55:24

+0

它应该工作... – Rifat 2010-02-05 15:56:08

+0

不,不起作用。无论如何,该对话框是一个post DOM事件,所以在对话框中添加document.ready并不合理,我想呢? – Rio 2010-02-05 15:57:03

0

我想你应该换你$(function(){// code here})中的代码);确保您的代码只在DOM准备就绪时运行。

+0

同样,如果对话内容是通过AJAX加载的HTML片段,则没有“就绪”事件。当然,我不知道他的对话是如何运作的,因为原来的问题并没有很好地描述环境。 – Pointy 2010-02-05 15:56:34

+0

如果你通过AJAX加载HTML,你应该在将HTML加载到DOM之后运行bind方法,这取决于具体的用例。 – 2010-02-05 16:01:51