Thay đổi văn bản giữ chỗ bằng jQuery


206

Tôi đang sử dụng một trình giữ chỗ jQuery (https://github.com/danielstocks/jQuery-Placeholder). Tôi cần thay đổi văn bản giữ chỗ với sự thay đổi trong menu thả xuống. Nhưng nó không thay đổi. Đây là mã:

$(function () {
    $('input[placeholder], textarea[placeholder]').placeholder();
    $('#serMemdd').change(function () {
        var k = $(this).val();
        if (k == 1) {
            $("#serMemtb").attr("placeholder", "Type a name (Lastname, Firstname)").placeholder();
        }
        else if (k == 2) {
            $("#serMemtb").attr("placeholder", "Type an ID").placeholder();
        }
        else if (k == 3) {
            $("#serMemtb").attr("placeholder", "Type a Location").placeholder();
        }
    });
});

Html của tôi:

<div class="filterbox">
        <select name="ddselect" id="serMemdd">
            <option value="1" selected="selected">Search by Name</option>
            <option value="2">Search by ID</option>
            <option value="3">Search by Location</option>
        </select>
        <input id="serMemtb" type="text" style="width: 490px" placeholder="Type a name    (Lastname, Firstname)" />
        <input id="seMemBut" type="button" value="Search" />
    </div>

Bất kì ai có thể hình dung điều này không?


Bạn có thể cung cấp html của bạn không?
Timothy Aaron

@TimothyAaron Tôi đã cung cấp HTML
Krishh

@Blankasaurus - BS không tích hợp sẵn. Thuộc tính giữ chỗ này hoạt động tự nhiên trong các trình duyệt hiện đại, nhưng không có polyfill cho IE: github.com/twitter/bootstrap/issues/2401
Jannie Theunissen

Câu trả lời:


367
$(document).ready(function(){ 
  $('form').find("input[type=textarea], input[type=password], textarea").each(function(ev)
  {
      if(!$(this).val()) { 
     $(this).attr("placeholder", "Type your answer here");
  }
  });
});

Sao chép và dán mã này vào tệp js của bạn, điều này sẽ thay đổi tất cả văn bản giữ chỗ từ toàn bộ trang web.


1
Bạn nên bỏ qua if-statement, vì thông thường bạn muốn đặt giữ chỗ cho dù phần tử đầu vào có giá trị hay không. Mặt khác, không có chỗ dành sẵn được hiển thị nếu người dùng làm trống phần tử đầu vào.
isnot2bad

99

Bạn có thể sử dụng mã sau để cập nhật trình giữ chỗ theo id:

$("#serMemtb").attr("placeholder", "Type a Location").val("").focus().blur();

15

đơn giản là bạn có thể sử dụng

$("#yourtextboxid").attr("placeholder", "variable");

trong đó, nếu biến là chuỗi thì bạn có thể sử dụng như trên, nếu biến đó thay thế bằng tên như "biến" bằng dấu ngoặc kép.

ví dụ: $("#youtextboxid").attr("placeholder", variable); nó sẽ hoạt động.


13

Các plugin không trông rất mạnh mẽ. Nếu bạn gọi .placeholder()lại, nó sẽ tạo một thể hiện mới Placeholdertrong khi các sự kiện vẫn bị ràng buộc với cái cũ.

Nhìn vào mã, có vẻ như bạn có thể làm:

$("#serMemtb").attr("placeholder", "Type a name (Lastname, Firstname)").blur();

BIÊN TẬP

placeholderlà một thuộc tính HTML5 , đoán xem ai không hỗ trợ nó?

Plugin của bạn dường như không thực sự giúp bạn vượt qua thực tế là IE không hỗ trợ nó, vì vậy trong khi giải pháp của tôi hoạt động, plugin của bạn thì không. Tại sao bạn không tìm thấy cái nào.


8

$(this).val()là một chuỗi. Sử dụng parseInt($(this).val(), 10)hoặc kiểm tra '1'. Mười là để biểu thị cơ sở 10.

$(function () {
    $('input[placeholder], textarea[placeholder]').blur();
    $('#serMemdd').change(function () {
        var k = $(this).val();
        if (k == '1') {
            $("#serMemtb").attr("placeholder", "Type a name (Lastname, Firstname)").blur();
        }
        else if (k == '2') {
            $("#serMemtb").attr("placeholder", "Type an ID").blur();
        }
        else if (k == '3') {
            $("#serMemtb").attr("placeholder", "Type a Location").blur();
        }
    });
});

Hoặc là

$(function () {
    $('input[placeholder], textarea[placeholder]').placeholder();
    $('#serMemdd').change(function () {
        var k = parseInt($(this).val(), 10);
        if (k == 1) {
            $("#serMemtb").attr("placeholder", "Type a name (Lastname, Firstname)").blur();
        }
        else if (k == 2) {
            $("#serMemtb").attr("placeholder", "Type an ID").blur();
        }
        else if (k == 3) {
            $("#serMemtb").attr("placeholder", "Type a Location").blur();
        }
    });
});

Các plugin khác

ori đã làm tôi chú ý rằng plugin bạn đang sử dụng không khắc phục được lỗi HTML của IE.

Hãy thử một cái gì đó như thế này: http://archive.plugins.jquery.com/project/input-placeholder


Lưu ý cho OP: Cũng lưu ý rằng sự kiện thay đổi được nối vào hộp chọn, không phải nhập văn bản. $('#serMemdd').change(function () {
Stewam

Tôi nghĩ rằng anh ta đang cố gắng làm cho bối cảnh văn bản giữ chỗ nhạy cảm dựa trên DDL serMemdd. Tôi không biết.
Jason

Vâng, đó là những gì có vẻ như đối với tôi, nhưng trong JS của anh ấy, anh ấy có sự kiện thay đổi được nối với vùng văn bản, đó không phải là nơi mà nó nên được nối nếu đó là chức năng anh ấy theo đuổi. Đó là lý do tại sao tôi gọi ra một lưu ý cho sự thay đổi trong mã của bạn, trong trường hợp anh ta không biết.
Stewam

Đã cập nhật câu trả lời của tôi với Blur () kể từ .placeholder () làm rối tung mọi thứ nếu bạn gọi nó nhiều hơn một lần. Bạn nên gọi nó trong doc. Đã sẵn sàng để thiết lập nó.
Jason

<select name = "ddselect" id = "serMemdd">
Jason

2

ví dụ hoạt động của trình giữ chỗ động bằng Javascript và Jquery http://jsfiddle.net/ogk2L14n/1/

<input type="text" id="textbox">
 <select id="selection" onchange="changeplh()">
     <option>one</option>
     <option>two</option>
     <option>three</option>
    </select>

function changeplh(){
    debugger;
 var sel = document.getElementById("selection");
    var textbx = document.getElementById("textbox");
    var indexe = sel.selectedIndex;

    if(indexe == 0) { 
     $("#textbox").attr("placeholder", "age");

}
       if(indexe == 1) { 
     $("#textbox").attr("placeholder", "name");
}
}

2

thay đổi văn bản giữ chỗ bằng cách sử dụng jquery

thử cái này

$('#selector').attr("placeholder", "Type placeholder");

1

Di chuyển dòng đầu tiên của bạn xuống phía dưới sẽ giúp tôi: http://jsfiddle.net/tcloninger/SEmNX/

$(function () {
    $('#serMemdd').change(function () {
        var k = $(this).val();
        if (k == 1) {
            $("#serMemtb").attr("placeholder", "Type a name (Lastname, Firstname)").placeholder();
        }
        else if (k == 2) {
            $("#serMemtb").attr("placeholder", "Type an ID").placeholder();
        }
        else if (k == 3) {
            $("#serMemtb").attr("placeholder", "Type a Location").placeholder();
        }
    });
    $('input[placeholder], textarea[placeholder]').placeholder();
});

... tốt, dù sao thì thuộc tính giữ chỗ đang thay đổi trong Chrome đối với tôi. Khi tôi kiểm tra nó trong IE, thuộc tính đang thay đổi, nhưng nó không thực sự hiển thị nó. Bạn có chắc chắn đó là một plugin đáng tin cậy?
Timothy Aaron

0

Nếu đầu vào nằm trong div hơn bạn có thể thử điều này:

$('#div_id input').attr("placeholder", "placeholder text");

0

thử cái này

$('#Selector_ID').attr("placeholder", "your Placeholder");

0

điều này làm việc cho tôi:

jQuery('form').attr("placeholder","Wert eingeben");

nhưng bây giờ điều này không hoạt động:

// Prioritize "important" elements on medium.
            skel.on('+medium -medium', function() {
                jQuery.prioritize(
                    '.important\\28 medium\\29',
                    skel.breakpoint('medium').active
                );
            });

0
$(document).ready(function(){ 
  $('form').find("input[type=search]").each(function(ev)
  {
     $(this).attr("placeholder", "Search Whatever you want");
  });
});

0
$(document).ready(function(){ 
     $("input[type=search]").attr("placeholder","this is a test");
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.