Shubham Bhardwaj
Shubham Bhardwaj

Reputation: 155

How to shorten this function?

This function is called on an onchange event of a checkbox. When checked i.e. receiver details are same to sender details, receiver inputs are assigned the value of sender input and get disabled. When unchecked i.e. not same details, receiver inputs are enabled and emptied.

function () {
    if (inputArr.sameReciever.checked) {
        inputArr.receiverName.value = inputArr.senderName.value;
        inputArr.receiverPhone.value = inputArr.senderPhone.value;
        inputArr.receiverEmail.value = inputArr.senderEmail.value;
        inputArr.receiverName.setAttribute("disabled","true");
        inputArr.receiverPhone.setAttribute("disabled","true");
        inputArr.receiverEmail.setAttribute("disabled","true");
    }else{
        inputArr.receiverName.value = "";
        inputArr.receiverPhone.value = "";
        inputArr.receiverEmail.value = "";
        inputArr.receiverName.removeAttribute("disabled");
        inputArr.receiverPhone.removeAttribute("disabled");
        inputArr.receiverEmail.removeAttribute("disabled");
    }
});

Upvotes: 1

Views: 55

Answers (1)

Magus
Magus

Reputation: 15104

I'm not sure if this is what you are looking for. But i'll go on something like this:

var attributesMap = {
    receiverName: 'senderName',
    receiverPhone: 'senderPhone',
    receiverEmail: 'senderEmail'
};

function fn() {
    for (var key in attributesMap) {
        if (inputArr.sameReciever.checked) {
            inputArr[key].value = inputArr[attributesMap[key]].value;
            inputArr[key].setAttribute("disabled","true");
        } else {
            inputArr[key].value = '';
            inputArr[key].removeAttribute("disabled");
        }
    }
}

It is more maintainable this way.

If you can use recent javascript (ES6), there's multiple improvements you can add.

Upvotes: 1

Related Questions