2010-02-05 88 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