2012-05-30 36 views
0

我正在爲jQuery手機中的錨標籤設置點擊處理程序,並通過引用錨標記內的處理函數(我需要這樣做原因很麻煩)。如果我使用字符串或整數作爲函數參數,但是如果我嘗試輸入對象的實例(如下圖所示),則此方法工作正常。任何意見,我可能做錯了將不勝感激。jQuery Mobile Clickhander不適用於自定義對象的實例

<head> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.css" 
    /> 
    <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
    <script src="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.js"></script> 
</head> 

<body> 
    <script> 
     $(document).ready(function() { 

      function testObject() { 
       this.param1; 
      } 

      function maketestObject(param1) { 
       var result = new testObject(); 
       result.param1 = param1; 
       return result; 
      } 

      var i = 0; 
      var html; 
      for (i = 0; i <= 5; i = i + 1) { 
       var testInstance = maketestObject("test param"); 
       html += '<li><a href="#" data-theme="a" onclick="clickHandler(' + testInstance + '); return false;" rel="external" data-role="button">click test1</a></li>'; 
      } 

      $("#testList").append(html); 
      $("#testList").listview("refresh"); 

     }); 

     function clickHandler(e) { 
      alert(e); 
     } 
    </script> 
    <div data-role="page" class="type-interior"> 
     <div id="main" data-role="content"> 
      <ul id="testList" data-role="listview"></ul> 
     </div> 
    </div> 
</body> 

回答

0

我認爲它的工作原理

<head> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.css" 
/> 
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script src="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.js"></script> 

$(文件)。就緒(函數(){

 function testObject() { 
      this.param1; 
     } 

     function maketestObject(param1) { 
      var result = new testObject(); 
      result.param1 = param1; 
      return result; 
     } 

     var i = 0; 
     var html; 
     for (i = 0; i <= 5; i = i + 1) { 
      var testInstance = maketestObject("test param"); 
//var temp = "'" + testInstance+ "'"; 


/// Chaged into 

      var temp = "'" + testInstance.param1 + "'"; 

      html += '<li><a href="#" data-theme="a" onclick="clickHandler(' + temp + '); return false;" rel="external" data-role="button">click test1</a></li>'; 
     } 

     $("#testList").append(html); 
     $("#testList").listview("refresh"); 

    }); 

    function clickHandler(e) { 
     alert(e); 
    } 
</script> 
<div data-role="page" class="type-interior"> 
    <div id="main" data-role="content"> 
     <ul id="testList" data-role="listview"></ul> 
    </div> 
</div> 

+0

我想這個工作最初是因爲這種通過臨時但如在點擊處理程序返回「的翻譯:」換句話說警報(E)的對象,但它失去了它的領域,換句話說警報(E。 param1)返回「未定義」。 –

+0

@ user996035我編輯了我的答案..試試這個 –

+0

再次感謝您的幫助,我非常感謝。你提出的建議確實可行,但我的目標是傳入一個可能有多個字段的對象,所有這些字段都可以在點擊處理程序中訪問。你的建議基本上只是通過一個字符串。 –

0

做你用.live()函數 tryied當你添加動態元素,他們沒有事件的DOM,所以我建議你

for (i = 0; i <= 5; i = i + 1) { 
       var testInstance = maketestObject("test param"); 
       var temp = "'" + testInstance + "'"; 
       html += '<li><a href="#" data-theme="a" class="new" return false;" rel="external" data-role="button">click test1</a></li>'; 
      } 

/*** jQuery code ****/ 
     $(".new").live("click",function(){ 
    // your code here 
    aler("it working"); 
    }); 

我通常這樣做時,一個按鈕不爲我工作希望適合你!

0

我想你可以使用這個achive您OAL ..使用

<head> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.css" 
/> 
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script src="http://code.jquery.com/mobile/1.1.0-rc.1/jquery.mobile-1.1.0-rc.1.min.js"></script> 
</head> 

<body> 
    <script> 
// Create global object array .. 
     var testInstanc = []; 
     $(document).ready(function() { 




      function testObject() { 
       this.param1; 
      } 

      function maketestObject(param1) { 
       var result = new testObject(); 
       result.param1 = param1; 
       return result; 
      } 

      var i = 0; 
      var html; 
      for (i = 0; i <= 5; i = i + 1) { 

       // var temp = "'" + testInstance + "'"; 
// set array to object 
       testInstanc[i] = maketestObject("test param" + i); 

pass clickhandler function to your array index 
       html += '<li><a href="#" data-theme="a" onclick="clickHandler(' + i + '); return false;" rel="external" data-role="button">click test1</a></li>'; 
      } 

      $("#testList").append(html); 
      $("#testList").listview("refresh"); 



     }); 
     function clickHandler(i) { 

//訪問對象屬性testInstance陣列 警報(testInstanc [I] .param1);

 } 

    </script> 
    <div data-role="page" class="type-interior"> 
     <div id="main" data-role="content"> 
      <ul id="testList" data-role="listview"></ul> 
     </div> 
    </div> 
</body> 
</html> 
+0

@Ben Pearce你檢查過這個解決方案嗎? –

相關問題