Что-то не так с этим jQuery? - PullRequest
       3

Что-то не так с этим jQuery?

1 голос
/ 14 сентября 2010
function insertParamIntoField(url, param, field) { 
   var anchor = document.createElement('a'), query;
   anchor.value = url;
   query = anchor.query.split('&');

   for(var i = 0, kv; i < query.length; i++) {
      kv = query[i].split('=', 2);
      if (kv[0] == param) {
         field.value = kv[1];
         return;
      }
   }  
}

$("a .reply").click(function () {
   insertParamIntoField(this.href, "replyto", $("input .inputField")[0]);
   return false; // prevent default action
});

Это мой HTML-код:

<textarea name="inputField" id="inputField" tabindex="1" rows="2" cols="40"></textarea>
<a class ="reply"  href="home.php?replyto=username">reply</a>

Я пытаюсь вставить значение из URL-адреса ответа в текстовое поле с помощью Ajax, как в Twitter.Если вы понимаете, о чем я?

Ответы [ 3 ]

4 голосов
/ 14 сентября 2010

Я не тестировал всю функцию скрипта, но вам нужно удалить пробелы между тегом и классом / ID, поэтому используйте «a.reply» и «input # inputField» (или просто «#inputField»):

$("a.reply").click(function () {
   insertParamIntoField(this.href, "replyto", $("#inputField")[0]);
   return false; // prevent default action
});
1 голос
/ 14 сентября 2010

В дополнение к тому, что предлагает Фуджи, есть несколько вещей, которые я заметил в вашей функции insertParamIntoField:

// url: home.php?replyto=username, param: replyto, field: $("input .inputField")[0]
function insertParamIntoField(url, param, field) {  
   var anchor = document.createElement('a'), query; 
   // anchor is a link element and doesn't have a 'value' attribute
   anchor.value = url; 
   // It also won't have a 'query' attribute. This probably causes an error
   query = anchor.query.split('&'); 

   // As stated above there is no 'query' attribute to split on, but
   // also there are no &'s to split on in the url you pass in anyway.
   // At best, query will equal the full url...
   for(var i = 0, kv; i < query.length; i++) { 
      kv = query[i].split('=', 2); 
      // ...so splitting on = would get you 
      // query[0] = "home.php?replyto", query[1] = "username"
      // ... and "home.php?replyto" != "replyto", so...
      if (kv[0] == param) { 
         //... it never gets here. Also 'field' is a textarea, not an input
         // so it also doesn't have a 'value' attribute. try field.html(kv[1]) istead
         field.value = kv[1]; 
         return; 
      } 
   }   
} 

Попробуйте это:

function insertParamIntoField(url, param, field) {
   var qs = url.split("?");
   var query = qs[1].split("&");

   for(var i = 0, kv; i < query.length; i++) {
      kv = query[i].split('=', 2);
      if (kv[0] == param) {
         field.html(kv[1]);
         return;
      }
   }  
}

$("a.reply").click(function () {
   insertParamIntoField(this.href, "replyto", $("textarea#inputField"));
   return false; // prevent default action
});
1 голос
/ 14 сентября 2010

Я здесь вроде как обманываю:)

function insertParamIntoField(url, param, field) { 
   var anchor = document.createElement('a'), query;
   anchor.href = url;
   query = anchor.search.substring(1, anchor.search.length).split('&');

   for(var i = 0, kv; i < query.length; i++) {
      kv = query[i].split('=', 2); console.log(kv);
      if (kv[0] == param) {
         field.value = kv[1];
         return;
      }
   }  
}

$("a.reply").click(function () {
   insertParamIntoField(this.href, "replyto", $("textarea.inputField")[0]);
   return false; // prevent default action
});

Или:

function insertParamIntoField(anchor, param, field) { 
   var query = anchor.search.substring(1, anchor.search.length).split('&'); // anchor is a DOMElement 

   for(var i = 0, kv; i < query.length; i++) {
      kv = query[i].split('=', 2);
      if (kv[0] == param) {
         field.value = kv[1];
         return;
      }
   }  
}

$("a.reply").click(function () {
   insertParamIntoField(this, "replyto", $("textarea.inputField")[0]);
   return false; // prevent default action
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...