2013-05-15 109 views
0

我想通過拉取值來設置字段標籤並更新默認值來找出一種方法來改變稱爲輸入字段的ajax的最大長度。字段標籤都遵循相同的格式 - id,class,type和maxlength。新的最大長度值設置在ID總是存在... ... max_X_characters如何從標籤設置輸入字段最大長度

`<input id="ecwid-productoption-16958710-Line_5_:0028max_4_characters:0029" class="gwt- 
TextBox ecwid-productBrowser-details-optionTextField ecwid-productoption- 
Line_5_:0028max_4_characters:0029" type="text" maxlength="200"></input>` 

因此,在這個例子中,我需要將最大長度設置爲4

的另一個問題是,有多個輸入字段,通常具有不同的最大長度值。一個例子見here

我正在考慮設置一個腳本,以便在字段加載完成後提取值,但我不介意承認它,這個在我的頭上 - 希望你們中的一個聰明的人能找到它!

更新:感謝您的建議,我嘗試了兩種方法,但是不能讓它們工作。

這裏是由Ecwid的技術團隊建議的代碼,將頁面上的所有輸入字段一個最大長度(6在這種情況下)

`Ecwid.OnPageLoaded.add(function(page){if (page.type == "PRODUCT") { 
$("input.ecwid-productBrowser-details-optionTextField").attr('maxlength','6'); 
}; 
})` 

然而,正如我說有有一些不同maxlengths輸入字段產品。

我已經嘗試用函數替換上面的'6',根據您的建議,從輸入ID獲取maxlength,但無法使其工作。

還有什麼想法?

感謝

更新:

破解了(幾乎),這裏的工作代碼

`Ecwid.OnPageLoaded.add(function(page){ 
var regex = new RegExp("max_(\\d+)_characters"); 
var inputs = document.getElementsByTagName("input"); 
for (var i = 0; i < inputs.length; i++) { 
var inp = inputs[i]; 
if (regex.test(inp.id)) { 
    var newLimit = inp.id.match(regex)[1]; 
    inp.maxLength = newLimit; 
}   
} 
});` 

非常感謝您的幫助,它的工作原理是在產品頁面上的夢想但還有另一個領域沒有。顧客可以通過彈出窗口從購物籃中編輯輸入文本。

的領域有類似的代碼:

`<input id="ecwid-productoption-16958710-Line_5_:0028max_4_characters:0029" 
class="gwt-TextBox ecwid-productBrowser-details-optionTextField ecwid-productoption- 
Line_5_:0028max_4_characters:0029" type="text" maxlength="200"></input>` 

建議非常歡迎

克里斯

UPDATE:

很多很多,非常感謝ExpertSystem(你天才的你! ) - 我想我們已經得到了它。 (在IE10,Firefox 21,Chrome 27上測試)。

以下代碼適用於使用Yola和Ecwid的用戶,但我猜測原始代碼可能適用於使用其他網站建設者的用戶。它通過檢查輸入字段標題中的數字(在此情況下是'max'和'characters'之間的值)並將其替換爲字段的maxLength值來限制用戶可以在Ecwid中輸入字符的字符數。它限制產品瀏覽器,html小部件和購物車彈出窗口中的字段。

它是這樣的:

轉到Yola的自定義網站跟蹤代碼部分。在「頁腳代碼」列(實際上放置在「體」的底部),將此代碼:

<script> 
Ecwid.OnPageLoaded.add(function(page){ 
var regex = new RegExp("max_(\\d+)_characters"); 
var inputs = document.getElementsByTagName("input"); 
for (var i = 0; i < inputs.length; i++) { 
    var inp = inputs[i]; 
    if (regex.test(inp.id)) { 
     var newLimit = inp.id.match(regex)[1]; 
     inp.maxLength = newLimit; 
}   
} 
}); 
</script> 

<script> 
var regex = new RegExp("max_(\\d+)_characters"); 
function fixMaxLength(container) { 
    var inputs = container.getElementsByTagName("input"); 
    for (var i = 0; i < inputs.length; i++) { 
     var inp = inputs[i]; 
     if (regex.test(inp.id)) { 
      var newLimit = inp.id.match(regex)[1]; 
      inp.maxLength = newLimit; 
     } 
    } 
}; 
</script> 

和到這個「標題碼」列:

<script> 
document.addEventListener("DOMNodeInserted", function() { 
    var popups = document.getElementsByClassName("popupContent"); 
    for (var i = 0; i < popups.length; i++) { 
     fixMaxLength(popups[i]); 
    } 
}); 
</script> 

這就是它!你很好走。

+0

如果在ID和className字段中使用更多字符,它將自行消除痛苦!好東西你至少正確地關閉了輸入! – adeneo

+2

如果您可以將值X動態插入到id/class名稱中,爲什麼不能將該值插入到源中的maxlength屬性中? –

+0

我可能應該提到,我使用的是ecwid,所以沒有任何控制maxlength源(我試過要求他們在後端添加maxlength選擇框,但它是不行)。我可以使用JavaScript API來獲取或更改某些元素。 – GGGS

回答

0

這並不完全清楚「ajax稱爲輸入字段」是什麼意思,但假設輸入字段是在某個AJAX調用的成功回調中創建並添加到DOM中的,您可以將以下代碼放入您<head>頁:

var regex = new RegExp("max_(\\d+)_characters"); 
function fixMaxLength(container) { 
    var inputs = container.getElementsByTagName("input"); 
    for (var i = 0; i < inputs.length; i++) { 
     var inp = inputs[i]; 
     if (regex.test(inp.id)) { 
      var newLimit = inp.id.match(regex)[1]; 
      inp.maxLength = newLimit; 
     } 
    } 
} 

,然後在AJAX調用的 「的onSuccess」 回調的結尾,附加這樣的:

fixMaxLength(document); 

UPDATE
根據您的意見,如果您需要將fixMaxLength()應用於div的「popupContent」類,它會動態地添加到您的DOM中,但一種簡單的方法(不是最有效的方式)將爲DOM修改事件添加一個偵聽器。在<head>某處):

document.addEventListener("DOMNodeInserted", function() { 
    var popups = document.getElementsByClassName("popupContent"); 
    for (var i = 0; i < popups.length; i++) { 
     fixMaxLength(popups[i]); 
    } 
}); 

(注:我只測試了Chrome和Firefox的最新版本,所以我真的不知道了哪些其他/舊的瀏覽器這樣做的工作)
(注2: GGGS,已經在IE10上進行了測試(並且發現它可以工作)。)

+0

Got it!感謝您的幫助 - 現在有另一個問題。 – GGGS

+0

總是樂於幫助:)如果您有其他問題,請在此處填寫一個新的帖子。我敢打賭很多人會很樂意再次幫忙。 – gkalpak

+0

查看我上次更新的下一期 – GGGS

0

你的id屬性的正則表達式如何?如下所示:

jQuery('input').each(function() { 
    var idVal = jQuery(this).attr('id'); 
    var regex = /max_(\d+)_characters/g; 
    var result = regex.exec(idVal); 
    var length = result[1]; 
}); 

這是對所有輸入的循環。一旦運行,長度變量將具有適當的長度,以供下一步使用。

相關問題