2014-09-12 73 views
-1

我處於使用供應商提供的系統的情況,該系統內置了無法驗證的腳本改性。Javascript修改現有頁內腳本中無法手動更改的變量

頁面上的其中一個腳本調用與文本框中的字符數相關的驗證方法。

它將字符數限制作爲方法調用中的靜態數字傳遞。靜態編號來自一個配置文件,我可以改變它。問題是我需要根據用戶從下拉菜單中選擇的值來更改此號碼。

發生了什麼是我必須在窗體提交文本框中添加內容。我附加的內容包括一個具有可變長度的下拉列表中的值。

我正在運行的腳本在文本框中追加內容的工作正常。我碰到的問題是用戶輸入的文本數量最多(有一個字符倒計時),當他們點擊提交時,系統會從下拉菜單中添加內容,但會截斷用戶消息的結尾,因爲它是現在比接受的數字更長。

由於這是一個供應商/封閉系統,我調整現有的頁面腳本,表單元素等的選項非常有限。我可以添加腳本(包括jQuery腳本)來修改DOM。

任何想法如何處理這樣的事情將非常感激。

謝謝!

編輯

這是不是一個工作的例子,但也許說明了什麼我想要做的事:

<select name="selectedname" id="selectedname"> 
    <option value="1">Value 1</option> 
    <option value="2">Value 2</option> 
</select> 
<textarea id="message"></textarea> 
<span id="errormessage"><!-- this is where you would see the text counting down --></span> 
<script> 
    vendor_script_that_counts_down_text_and_validates_length(arg1, arg2, 500) 
</script> 
<button id="send"></button> 

我的腳本:

/* Attempt to add the name to the question*/ 
if (window.jQuery) { 
    //Adding this to prevent conflicts with existing javascript 
    jQuery.noConflict(); 
    // Adding usual jQuery symbol to the local scope of this method 
    jQuery(document).ready(function($){ 
     $("#send").on('click', function(e) { 
     var valueSelected = getName($); // this is a function that gets the value of the dropdown 
     var message = "This message is for " + valueSelected + ". The message begins here:\n\n"; 
     $("#message").val(function(index, userMessage){ 
      return message + userMessage; 
     }) 
     }); 
    }); 
} 

在怎樣的條件腳本目前正在一起工作,他們不是,我想這是我問題的關鍵,他們可以一起工作嗎?有沒有一種方法可以修改我的腳本,以根據通過約束選擇的下拉值更改驗證腳本調用(500)中使用的數字,我無法修改除創建的腳本之外的任何HTML或頁面腳本?

+2

[添加一些代碼。也許是一個簡化但工作的例子。](https://stackoverflow.com/help/mcve) – Yoshi 2014-09-12 15:49:09

+0

我可以添加一些代表正在發生的事情,但我無法添加供應商提供的將複製的驗證腳本功能。這仍然有幫助嗎? – someoneinomaha 2014-09-12 16:03:18

+0

好吧,在某種程度上,你必須向我們展示你的腳本如何一起工作。事實上,這是抽象的。 – Yoshi 2014-09-12 16:36:50

回答

1

從您添加的內容看來,供應商函數似乎是全局函數。如果是這樣的話,你可以用一個新的覆蓋它,給你改變/操縱第三個參數的可能性。

例如: - (供應商腳本之後添加此加載,但在此之前的函數來獲取的稱呼):

vendor_script_that_counts_down_text_and_validates_length = function (orgFunc) { 
    // return a new function 
    return function (arg1, arg2, charCount) { 
    // add your code... 

    // call the original function 
    return orgFunc(arg1, arg2, charCount || 500); 
    }; 
}(vendor_script_that_counts_down_text_and_validates_length); 
+0

非常感謝 - 這工作! – someoneinomaha 2014-09-12 18:24:52