2012-06-06 97 views
1

我想動態地更改任何實例,其中'form.submit();'在$('form')中的某些select元素的onchange函數中出現。以便表單本身觸發提交事件。動態更新onchange函數問題

這裏有這樣一個選擇列表中的一個例子,其中的onchange功能需要更新:

<td class="form-field selectinput" align="left" valign="left" style="width: 90px;" title="Select status type"> 
     <select class="filterlist" name="cStatus" tabindex="5" style="width: 90px;" onchange="form.submit();"> 
      <option value="" title="[All]">[All]</option> 
      <option value="A" title="Authorised">Authorised</option> 
      <option value="C" selected="" title="Cancelled">Cancelled</option> 
      <option value="U" title="Declined">Declined</option> 
      <option value="R" title="Requested">Requested</option> 
      <option value="T" title="Taken">Taken</option> 
      <option value="W" title="Withdrawn">Withdrawn</option> 
     </select> 
     </td> 

我在頁面中插入的標頭部分以下嘗試和更新的功能:

$(document).ready(function(){ 
$(function() { 
    $('select').each(function() { 
    var txt = this.onchange ; 
    alert(txt); 
    var patt=/form.submit()/g; 
    var result=patt.test(txt); 
    if (result) { 
     var txt = txt.replace('form.submit()',""); 
     this.onchange = eval(txt); 
    } 
    }); 
}); 

});

警報消息出現了:

function onchange(event) { form.submit(); } Blockquote

,然後控制檯日誌顯示以下錯誤:

Uncaught TypeError: Object function onchange(event) { form.submit(); } has no method 'replace'

其實我可以得到它具有以下工作:

this.onchange = function() { $('form').submit(); } 

但有些情況下,onchange帶有form.submit();例如:

form.submit();form.iYear.disabled=true;form.cGroupItem.disabled=true; 

所以我不想替換整個函數本身,而是刪除'form.submit();'並用「$(」形式「)替換它;,所以上述接下來出現提交()。」:

$('form').submit();form.iYear.disabled=true;form.cGroupItem.disabled=true; 

我已經()在不同的地方,但隨時使用的toString()和eval嘗試我嘗試編輯字符串txt,我不斷收到對象沒有方法錯誤。

任何想法??

+0

爲了更好,更快的答案,你應該通過單擊編輯鏈接上添加了對應於您正在使用(JavaScript的?)語言標籤低於你的問題。 – assylias

+0

onchange不是一個字符串;這是一個函數,這就是爲什麼你會得到「......沒有方法」替換錯誤。當您使用警報時,它會被強制轉換爲字符串。 – Steve

+0

史蒂夫,有沒有辦法,該函數可以作爲一個字符串操縱?它可以強制成一個字符串,而不是使用警報? –

回答

0

而不是做你的時髦的評估和更換的只是試試這個:

... 
    if (result) { 
     this.onchange = function(){}; //empty function 
    } 
... 
+0

感謝您的帖子,但我已經更新了這個問題多一點關於保留與form.submit()一起出現的代碼的目標,所以如果我使用上述,我失去了其他代碼。 –