2013-05-18 101 views
1

使用Cordova 2.5.0,我使用以下函數獲取HTML頁面中的所有<input>元素。使用相同的jQuery函數設置不同html元素類型的值

function getInput() { 
    var formElements = new Object(); 
    $("form :input").each(function(){ 
     formElements[this.name] = $(this).val(); //that's this line 
    }); 
    return formElements; 
} 

其實,我不「搞定」的元素,而是價值觀,你可以在片斷的第四行看到。

現在,我正試圖在後面的應用程序中設置值。

function insertResults(data) { //data is a json string 
    console.log("in insertResults (JS): " + data); 
    var jso = JSON.parse(data); 
    for (var key in jso) { 
     addContentToElement(key, jso[key]);  
    } 
} 

function addContentToElement(elementname, valuetoset) { 
    $(function() { 
     $("input[name='" +elementname +"']").val(valuetoset); 
    }); 
} 

console.log()打印一下:in insertResults (JS): {"checkbox3":"","textfieldmulti1":"some text","textfield1":"some more text","boxed1":"even more text","checkbox1":"on","checkbox2":"on"}

而且上面的代碼工作蠻好的HTML文本框。但是,如果可能的話,我想設置複選框等等的值,我希望.val(value)可以做到這一點,畢竟,我可以檢索元素的值以及.val(),即使從其他元素,就像一個複選框。我寧願不檢查我想添加內容的每個元素,並根據元素類型使用正確的jQuery方法來設置元素的值。

任何方式或方法來實現這一目標?

(爲了更清楚地說明:) addContentToElement("checkbox3", "on");不起作用,儘管我從元素中檢索on.val(),但addContentToElement("textfield1", "some text")確實如此。而且我知道我可以用.prop('checked', true).attr('checked', true)來完成,但由於我可以通過.val()獲得值,爲什麼不設置它呢?

回答

2

您不能使用「val()」複選框和radioboxes進行檢查,因爲它們與文本框不同。它們在您更改「checked」屬性以將表單數據發送到服務器,網站等時工作。只有當你想改變值(值屬性)時纔可以使用val()。

因此,如果我理解正確,當「addContentToElement」函數獲取「on」值時,您希望更改複選框。我改變了你的代碼,你可以使用下面的代碼。

function addContentToElement(elementname, valuetoset) { 
$(function() { 
    if (valuetoset === "on") { 
     $("input[name='" +elementname +"']").attr('checked', true); 
    } else { 
     $("input[name='" +elementname +"']").val(valuetoset); 
    } 
}); 
} 

但是你應該發送類型來找到複選框的輸入。

+0

所以簡短的回答是:「不,你不能,你應該處理所有不同的元素類型(用switch語句或其他)」? – stealthjong

+0

是的,正是:) –

相關問題