2015-05-09 163 views
0

變量 '網址' 是點擊功能裏面不確定的,但它是可用buildUrl函數內部如何從一個函數傳遞變量給另一個函數

HTML:

<label class="secondary" for="car01"> 
    <input type="checkbox" id="car01" name="carid" value="car01" checked>Select<span></span> 
</label> 
<label class="secondary" for="car02"> 
    <input type="checkbox" id="car02" name="carid" value="car02" checked>Select<span></span> 
</label> 

JS:

$(document).ready(function() { 
    //Init 
    buildUrl(); 
var url; 
    // Listen to change event 
    $('.selected-cars input[type=checkbox]').change(function (e) { 
     e.preventDefault(); 
     if($(this).prop('checked')){ 
      $(this).val(); 
       buildUrl(); 
       $('.button').click(function() { 
        console.log('Click happen'); 
        console.log('url', url); 
        $('.button').attr('href', url); 
       }); 
     }else{ 
      $(this).val(); 
       buildUrl(); 
     } 
    }); 
    // Build URL 
    function buildUrl(){ 
      var carIds = $("input[type=checkbox]:checked").serialize(); 
      var url = "abc.com?" + carsIds; 
      console.log('url', url); 
    }; 
}); 
+0

但你永遠不會設置網址。像'url = conquestUrl;'或其他東西 –

+0

'''buildUrl'中的var url'會遮蓋外部'var url',這就是爲什麼你不能在'click'內看到值('abc.com ...') '處理程序。 – univerio

+0

如果我刪除了var url;問題仍然存在:( –

回答

4

刪除var url = "abc.com?" + carsIds;中的var

var關鍵字會創建一個新的url,它的本地範圍爲buildUrl函數。如果您離開var,則將分配給您在外部範圍內聲明的url

function buildUrl(){ 
     var carIds = $("input[type=checkbox]:checked").serialize(); 
     url = "abc.com?" + carsIds; 
     console.log('url', url); 
}; 

然而,修改範圍之外的這樣的變量的函數常常使對代碼更難跟隨,特別是當它不是一個已知設計圖案的一部分。

看起來你也想立即更新按鈕的href,而不是等待某人點擊它。我建議簡化您的代碼:

$(document).ready(function () { 

    // Listen to change event 
    $('.selected-cars input[type=checkbox]').change(function () { 

     var carIds = $("input[type=checkbox]:checked").serialize(); 
     var url = "abc.com?" + carsIds; 

     // Update button href 
     $('.button').attr('href', url); 

    }); 

}); 

如果你想有一個buildUrl功能,讓您可以在其他地方調用它,然後使它返回,而不是從外部作用域賦值給一個變量的網址:

$(document).ready(function () { 

    // Listen to change event 
    $('.selected-cars input[type=checkbox]').change(function () { 

     var url = buildUrl(); 

     // Update button href 
     $('.button').attr('href', url); 

    }); 

    function buildUrl () { 
     var carIds = $("input[type=checkbox]:checked").serialize(); 
     return "abc.com?" + carIds; 
    } 

}); 
+0

謝謝。但是點擊函數不起作用 –

+0

@ ShoaibUd-Din你也沒有更新按鈕的'href'直到它被點擊。我發佈了一個簡化版本,每次更新'href'時間一個複選框切換。 – Paulpro

+0

它的工作!謝謝 –

相關問題