2011-02-04 2 views
1

У меня есть следующий код:JQuery & Handling Element идентификаторами

function mandatoryField(manF) 
    { 
     var fieldId = $(manF).val(); 
     if(fieldId == "") 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
    } 

Это не работает, но это делает:

function mandatoryField() 
    { 
     var fieldId = $("#element_1").val(); 
     if(fieldId == "") 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
    } 

полагаю, на моем первом примере, mandatoryField называется как таковой :

mandatoryField("#element_1") 

Почему это не работает, когда я пытаюсь заменить абсолютное имя элемента с переменной?

Edit:

Самые последние код - неработающие:

function isAmExSelected() 
    { 
     return $("#creditCardType").val() == "American Express"; 
    } 

    function containsOnlyDigits(str) 
    { 
     return str.match(/[^0-9]/) == null; 
    } 

    function validateCCNumber() 
    { 
     var ccn = $("#creditCardNumber").val(); 
     var onlyDigits = containsOnlyDigits(ccn); 
     if(isAmExSelected()) 
     { 
      return ccn.length == 15 && onlyDigits; 
     } 
     else 
     { 
      return ccn.length == 16 && onlyDigits; 
     } 
    } 

    function mandatoryField(manF) 
    { 
     var fieldId = $("#" + manF).val(); 
     return fieldId != ""; 
    } 


    function registerValidation(id, validateMethod(), errorMethod) 
    { 
      $(id).change(function(){ 
       if(validateMethod() == false) 
       { 
        errorMethod(); 
       } 
      }); 
    } 


    $(document).ready(function(){ 
     registerValidation("#creditCardNumber", validateCCNumber, function(){alert("Invalid Credit Card Number!")}); 
     $('input[type=text][class=mandatory]').blur(function(){ 
      if (mandatoryField(this.id)) { 
        alert('Field:' + this.id + ' is mandatory!') 
      } 
     }); 
    }); 

Edit 2

Я переписать всю вещь, чтобы выглядеть следующим образом:

 $('input[type=text][class=mandatory]').blur(function(){ 
      if (!($("#" + this.id).val().length)) { 
        alert('Field:' + this.id + ' is mandatory!'); 
      } 
     }); 

Если текстовый ввод обязательного класса размывается, тогда запустите функцию: if # foo.val() не имеет длины (т. в нем нет текста), запустите оповещение. Я считаю, что он должен работать, но это не так.

+0

Может быть, вы могли бы создать http://jsfiddle.net/ для вашего примера. –

+0

вам не нужно обязательное заполнение обязательное поле имя –

+0

проверить мое обновление –

ответ

0

Хорошо, это не сработает, потому что jquery предположит, что manF является объектом DOM, но вместо этого вы передаете строку.

вы когда-нибудь пытались

var tr = $('#element1') //----------1 

alert($(tr).val()) //------------2 

тр фактически объект дом

UPDATE ::

почему бы вам не попробовать это один

//some code on some event 

if(!check_mandatory()) 
//do something else 

else do another thing 

//some code on some event 

и функция

function check_mandatory() 
{ 
    $('.mandatory').each(function{ 
     if($(this).val() == ""){ 
      alert($(this).attr("name") + "required"); 
          //or you can use id or any attrib 
      return false; 
     } 
    }) 
} 

примечания коды могут не срабатывать не проверяли, если это не сработает, то дай мне знать

+0

Я думал, что переменные могут быть строками и по-прежнему работать? Как мне исправить эту проблему? – AKor

+0

@ Andrei проверить jao ответ или Marek'answer, конечно, что должно работать –

1

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

function mandatoryField(manF) 
    { 
     if($('#' + manF).val() == "") 
     { 
      return false; 
     } 
     else 
     { 
      return true; 
     } 
    } 
mandatoryField("element_1"); 

Но это будет получить вас значение элемента, не это id. Я не уверен, что вы делаете.

Trigger на опции поле размытия:

$('input[type=text][class=classForMandatoryFields]').blur(function(){ 
if (mandatoryField(this.id)) { 
    alert('Field:' + this.id + ' is mandatory!') 
} 
}); 
+0

Я тестирую, если что-то было введено в тип ввода = текстовый элемент, называемый # element_1. – AKor

+0

Я отредактировал свой скрипт, он должен работать. Попробуйте и дайте мне знать. Кроме того, если вы предоставите немного больше информации, мы могли бы сделать этот процесс немного проще и быстрее, например, проверить его на форме submit или на полевом событии (размытие). Более подробную информацию можно найти здесь: http://api.jquery.com/blur/ –

+0

Ваше новое редактирование все еще не работает, я обновил свой вопрос с помощью моего последнего кода. – AKor

1

Обновите свой код так:

function mandatoryField(manF) 
{ 
    var fieldId = $("#" + manF).val(); 
    if(fieldId == "") 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 

, а затем повторите попытку.

+0

Это не работает для меня таким же образом, как я описал в вопросе. – AKor

0

Не могли бы вы попробовать:

var fieldId = manF.val(); 

mandatoryField($("element_1")); 
1

Обе части кода должны работать так же, независимо от того, передается ли селектор в качестве аргумента, или при условии, как литерал $ непосредственно. Кроме того, вместо if..else, вы могли бы сделать

function mandatoryField(manF) { 
    var fieldId = $(manF).val(); 
    return fieldId != ""; 
} 
0

Кроме вашей проблемы селектора, вы можете переписать функцию так:

function mandatoryField(manF){ 
    return $(manF).val().length; 
} 

Это, потому что в JavaScript все имеет истину или ложное значение , Для чисел 0 - false.

EDIT:

Мой тест работает просто отлично:

function mandatoryField(manF){ 
    return $(manF).val().length; 
} 

(...) 

<input id="test" value=""/> 
<input type="button" value="dd" onClick="alert('length: ' + (mandatoryField('#test'))"/>